【发布时间】:2013-07-10 14:36:43
【问题描述】:
好的,我有一个旧的 Debian 虚拟机。包管理器是无用的。不,我不会更新操作系统。
我在我的系统上正确安装了 bzip2 库和开发头文件(它们实际上来自一个包)。
我从系统上绝对没有 Python 开始。我手动删除了所有内容。我下载了 Python 2.7.5 源代码,并配置了./configure --prefix=/usr。它配置得很好。我运行make,它编译得很好。我尝试./python -c "import bz2; print bz2.__doc__",它有效,并说:
python bz2 模块为 bz2 压缩库。它实现了一个完整的文件 接口,一枪(解)压缩功能,和类型 顺序(解)压缩。
然后我运行make test,整个测试套件进展顺利,尤其是“test_bz2”测试通过。
然后我运行 make install,它将我的新 Python 二进制文件安装到 /usr/bin/ 中。
我尝试/usr/bin/python -c "import bz2; print bz2.__doc__",但失败了:
Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 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 二进制文件只能在编译目录中存在二进制文件时才能找到东西,而不是当它被放入正常的生产安装位置时?我错过了什么?
从configure到make再到make install到尝试测试Python导入调用,我都是root。
我又从头开始了(这次是用--enable-shared btw 编译),并验证不仅在编译目录中有build/lib.linux-x86_64-2.7/bz2.so,而且一旦我运行make install,该文件就会被放入@987654338 @。
我尝试阅读 lib-dynload,但无法确定是否还有其他 Python 程序(如 CLI 的默认配置或其他)需要能够告诉它从 lib-dynload 中提取模块导入,或者如果有其他地方或选项可以告诉 make install 应该将其放在哪里而不是 dynload。
我仍然无法解释为什么 /path/to/compilation/python 二进制文件可以找到并加载 bz2.so 很好,但 /usr/bin/python 二进制文件却找不到(或加载)/usr/lib/python2.7/lib-dynload/bz2.so。
我认为这可能与安装没有像 /usr/lib/python 符号链接那样创建指向 /usr/lib/python2.7 目录的事实有关。但是我创建了符号链接,但还是不行。
我还是迷路了。
【问题讨论】:
-
您需要是 root 才能执行 make install。你检查了吗?
-
从
configure到make到make install到尝试测试python导入调用,我都是root。 -
debian 有 lib64 和 lib 吗?有时事情被放在错误的地方,你需要符号链接...(虽然听起来不像是这样,抱歉)。
-
您在 SO 上尝试过
ldd吗? -
另一个随机猜测 - selinux 没有启用是吗?
标签: python linux python-2.7