Python安装,无法找到bz2模块

3

好的,我有一个旧的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用户,从configuremake再到make install以及尝试测试Python导入调用的过程中都是如此。

我已经重新开始了整个过程(这次编译时使用了--enable-shared),并验证了不仅在编译目录中有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二进制文件可以找到并成功加载,但是/usr/bin/python二进制文件找不到(或加载)/usr/lib/python2.7/lib-dynload/bz2.so
我想也许与安装没有创建像/usr/lib/python符号链接指向/usr/lib/python2.7目录有关。但我创建了符号链接,仍然不起作用。
我仍然很困惑。

你需要以root身份运行make install命令。你确认过了吗? - z8po
我在整个过程中都是 root 用户,从 configuremake 再到 make install,直到尝试测试 Python 的导入调用。 - Kyle Simpson
Debian是否也有lib64目录,而不仅仅是lib目录?有时候会把东西放错目录,需要建立符号链接进行跨目录操作...(虽然说这似乎并不是现在的情况,抱歉)。 - andrew cooke
你尝试在SO上使用ldd了吗? - Ignacio Vazquez-Abrams
另一个随机猜测 - SELinux 没有启用,是吗? - andrew cooke
在我的Debian中,lib64是指向lib的符号链接,因此它们是相同的。我没有安装selinux。我在.so文件上运行了ldd,以下是它的输出:截图 - Kyle Simpson
1个回答

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,这导致我需要奇怪地覆盖默认设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接