Python安装,找不到bz2 modu

2024-04-20 09:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我有一个旧的Debian虚拟机。包管理器没用。不,我不会更新操作系统。在

我在我的系统上正确安装了bzip2库和开发头文件(它们实际上来自一个包)。在

我从系统上绝对没有Python开始。我手动移除了所有东西。我下载了Python2.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

我尝试了很多不同的方法,包括将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 install到尝试测试Python导入调用的整个过程中,我都是root用户。在

我又从头开始了(这次是用--enable-sharedbtw编译),并验证了不仅在编译目录中有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/lib/python2.7/lib-dynload/bz2.so。在

我想这可能是因为安装没有创建一个指向/usr/lib/python目录的/usr/lib/python符号链接。但我创建了符号链接,还是没有成功。在

我还是迷路了。在


Tags: install文件目录makebinso链接lib
1条回答
网友
1楼 · 发布于 2024-04-20 09:18:54

似乎是通过一长串的Twitter对话意外地得到了某种无答案的答案。在

我在这里提出了另一个堆栈溢出问题,以询问为什么我们找到了这个问题的解决方案:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config

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

运行python-config prefix会发现{prefix}默认值实际上是{},而不是我指定的{},这导致我需要将默认值重写回默认值,这很奇怪。在

相关问题 更多 >