好的,我有一个旧的Debian虚拟机。包管理器没用。不,我不会更新操作系统。
我在系统上正确安装了bzip2库和开发头文件(这些实际上来自一个软件包)。
我从零开始,系统中没有任何Python。我手动删除了所有内容。我下载了Python 2.7.5源代码,并使用./configure --prefix=/usr
进行配置。它成功地配置了。我运行make
,编译正常。我尝试./python -c“import bz2; print bz2.__doc__”
,它能运行并且显示:
The python bz2 module provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one shot (de)compression functions, and types for sequential (de)compression.
然后我运行make test
,整个测试套件都正常进行,特别是“test_bz2”测试通过了。
然后我运行make install
,它将我的新Python二进制文件安装到像我想要的那样的/usr/bin/目录下。
我尝试/usr/bin/python -c“import bz2; print bz2.__doc__”
,但它失败了,显示:
Traceback (most recent call last): File "", line 1, in ImportError: No module named bz2
我尝试了许多不同的方法,包括构建--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用户,从configure
到make
再到make install
以及尝试测试Python导入调用的过程中都是如此。
我已经重新开始了整个过程(这次编译时使用了--enable-shared
),并验证了不仅在编译目录中有build/lib.linux-x86_64-2.7/bz2.so
,一旦我运行make install
,该文件就会被放置到/usr/lib/python2.7/lib-dynload/bz2.so
。
make install
应该将其放置在哪里而不是dynload。仍然没有解释为什么
/path/to/compilation/python
二进制文件可以找到并成功加载,但是/usr/bin/python
二进制文件找不到(或加载)/usr/lib/python2.7/lib-dynload/bz2.so
。我想也许与安装没有创建像
/usr/lib/python
符号链接指向/usr/lib/python2.7
目录有关。但我创建了符号链接,仍然不起作用。我仍然很困惑。
configure
到make
再到make install
,直到尝试测试 Python 的导入调用。 - Kyle Simpsonldd
了吗? - Ignacio Vazquez-Abrams