5

我正在使用自动安装 python 2.4 的 redhat 5.8,但我使用的 python 包需要 python 2.6 或更高版本。所以,我在2.4旁边安装了python 2.7,以免踩到系统版本。

现在,我试图通过 pip 安装一个包,并得到以下错误:

CompressionError: bz2 module is not available

但是,我确实在我的机器上安装了该模块,正如我这样做时服务器版本给出的那样:

[~]$ 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.

和 2.7 这样的安装错误:

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
 Traceback (most recent call last):
  File "<string>", line 1, in <module>
 ImportError: No module named bz2

所以,我已经阅读了这些问题: 已经安装和这个非常好的问题,但这些问题似乎都不太合适。在第一种情况下,建议是安装缺少的部分,第二个问题是删除(或停止引用)额外的 python 安装。

我想要做的是放入符号链接或类似的符号链接,以便 python 2.7 安装知道 bz2 在哪里,以便我可以使用 pip 安装 python 包。

谢谢,乙


编辑:更多信息

因此,经过大量研究,python 2.5 中路径变量的建立方式似乎发生了巨大变化(可能是 red hat 没有更新的原因)。

因此,在 python 2.7 中,您可以通过在此文件夹中添加扩展名为 .pth 的文件来添加到 PYTHONPATH 变量:

/usr/local/lib/python2.7/site-packages/

我已经尝试了 2 种方法来让它正常工作。

首先,我只是将一些 python 2.4 路径文件提供给 2.7。这导致了不同类型的错误:

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: /usr/lib64/python2.4/lib-dynload/bz2.so: undefined symbol: Py_InitModule4

所以,有一点。

我还尝试将路径指向 /usr/lib/ 中的 libbz2.so 文件,这导致了熟悉的错误:

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named bz2

我仍然很难过,但我觉得我快要接近了。

我真的可以使用具有更多设置编程环境经验的人的一些输入。只写代码我更舒服:)

4

3 回答 3

7

昨天刚刚在同一个平台上做了这个并让它工作。这是我所做的:

设置CFLAGS="-I/path/to/bz2/include"LDFLAGS="-L/path/to/bz2/lib"。确保 bz2 库路径在您的LD_LIBRARY_PATH. 不过,您可能需要执行make distcleanand configure && make && make install

如果失败,直接编辑 setup.py 并进行类似于以下的替换:

# Gustavo Niemeyer's bz2 module.
if (self.compiler.find_library_file(['/home/someuser/packages/libbz2/lib'], 'bz2')): #lib_dirs, 'bz2')):

请注意,第二行末尾的注释部分是 setup.py 行的原始其余部分。

此外,我发现只需下载和构建最新版本的 bz2 并将上述所有内容都指向这比尝试让系统安装版本正常工作更容易。

无论如何,这绝对有效。我昨天做了:)

于 2012-12-19T16:54:34.657 回答
1

每当您使用系统安装的 Python 以外的 Python 时,我强烈建议您使用http://pypi.python.org/pypi/virtualenv。它使用自己的 python 副本为您设置一个“沙箱”,并重做所有路径等以指向新副本。然后,您可以使用 pip 安装所需的任何软件包。

于 2012-12-23T13:51:20.240 回答
1

提供的其他答案很有用且有帮助,但这就是我让它工作的方式。

问题不在于 Python 没有找到文件(正如我所想的那样),它只是无法正确使用它们。因此,我进入了 bzip2 的 Makefile,找到了如下所示的行:

CFLAGS= -Wall -Winline -O2 -g $(BIGFILES)

并将 -fPIC 添加到该行,如下所示:

CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)

哇啦!它编译得很好。

于 2012-12-28T14:46:39.190 回答