如何将bz2分配给python的altinstall?
问题内容:
我使用的是redhat 5.8,它自动安装了python 2.4,但我使用的是需要python
2.6或更高版本的python软件包。因此,我在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
我仍然很困惑,但是我觉得自己要关闭了。
我真的可以使用具有更多编程环境经验的人员的一些意见。我只写代码就舒服多了:)
问题答案:
昨天刚在同一平台上做到这一点,并使其正常工作。这是我所做的:
设置CFLAGS="-I/path/to/bz2/include"
和LDFLAGS="-L/path/to/bz2/lib"
。确保在您的中设置了bz2库路径LD_LIBRARY_PATH
。不过,您可能需要执行make distclean
和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,并指出上述所有内容都比尝试使系统安装的版本正常工作要容易。
无论如何,这绝对有效。我昨天做的:)