Python安装,无法找到bz2模块

时间:2013-07-12 06:00:20

标签: python linux python-2.7

好的,我有一个旧的Debian VM。包管理器没用。不,我不打算更新操作系统。

我的系统上正确安装了bzip2 lib和开发头文件(实际上是来自软件包)。

我从系统上绝对没有Python开始。我手动删除了一切。我下载了Python 2.7.5源代码,并使用./configure --prefix=/usr进行了配置。它配置很好。我运行make,它编译得很好。我试试./python -c "import bz2; print bz2.__doc__",它有效,并说:

  

python bz2模块提供了全面的界面   bz2压缩库。它实现了一个完整的文件   接口,单击(解)压缩功能和类型   顺序(de)压缩。

然后我运行make test并且整个测试套件进展顺利,特别是“test_bz2”测试通过。

然后我运行make install,它将我的新Python二进制文件安装到/ usr / bin /就像我想要的那样。

我尝试/usr/bin/python -c "import bz2; print bz2.__doc__",但失败了:

  

追踪(最近一次通话):     文件“”,第1行,in   ImportError:没有名为bz2的模块

我尝试了很多不同的东西,包括将Python构建为--enable-shared而不是,没有运气。我已经尝试了至少10次(每次完全清理所有内容,运行make distclean等)。没有运气。

我试过了:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH。仍然没有运气。

然而,如果我删除make install为/ usr / bin / python创建的符号链接,而是执行:ln -s /path/to/my/python/compile/python python,现在它神奇地起作用。

那么,到底是什么?为什么我创建的这个Python二进制文件只能在编译目录中存在二进制文件时找到东西,而不是当它被放入正常的生产安装位置时?我错过了什么?

我在整个过程中都是root用户,从configuremake再到make install,尝试测试Python导入调用。

我已经从头开始了(这次用--enable-shared btw进行编译),并验证不仅在编译目录中有build/lib.linux-x86_64-2.7/bz2.so,而且一旦我运行make install,文件放入/usr/lib/python2.7/lib-dynload/bz2.so

我已经尝试过对lib-dynload进行一些阅读,但是还无法确定是否还有其他Python程序(如CLI的默认配置或其他)需要能够告诉它pull模块从lib-dynload导入,或者如果有其他地方或选项告诉make install它应该放在哪里而不是dynload。

我仍然无法解释为什么/path/to/compilation/python二进制文件可以找到并加载bz2.so,但/usr/bin/python二进制文件无法找到(或加载)/usr/lib/python2.7/lib-dynload/bz2.so。< / p>

我想也许这与安装不会像/usr/lib/python符号链接创建指向/usr/lib/python2.7目录这一事实有关。但是我创建了符号链接但仍然没有。

我仍然迷失在这里。

1 个答案:

答案 0 :(得分:2)

看来,通过一连串的Twitter会话意外地得出了一种非答案的答案。

我在这里提交了另一个Stack Overflow问题,问我们为什么找到了解决这个问题的方法:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config

为了后人,现在的解决方案是我必须将PYTHONHOME环境变量设置为/usr,一切都开始工作。令人费解的是,文档说PYTHONHOME应该默认为{prefix},我在配置为/usr时显然将其设置为默认值。那我为什么要手动设置呢?

运行python-config --prefix显示{prefix}默认值实际上是/usr/bin,而非我指定的/usr,这导致我需要将默认值覆盖回默认值,奇怪的是