好的,我有一个旧的 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
和不构建 Python,没有运气。我已经尝试了至少 10 次(每次完全清理所有东西,运行make distclean
等)。没运气。
我试过了:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH
。仍然没有运气。
但是,如果我删除为 /usr/bin/python 创建的符号链接,make install
而是这样做:ln -s /path/to/my/python/compile/python python
,现在它神奇地起作用了。
那么,到底是什么?为什么我创建的这个 Python 二进制文件只能在编译目录中存在二进制文件时才能找到东西,而不是当它被放入正常的生产安装位置时?我错过了什么?
在整个过程中,我都是 root,从configure
到make
尝试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 的默认配置或其他)需要能够告诉它拉模块导入来自 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
目录的事实有关。但是我创建了符号链接,但仍然不行。
我仍然迷失在这里。