我已经安装在我的主目录中。
[spatel@~ dev1]$ /home/spatel/python-2.7.3/bin/python -V
Python 2.7.3
我试图运行一个需要python 2.7.x版本的脚本,我错过了bz2错误
[spatel@~ dev1]$ ./import_logs.py
Traceback (most recent call last):
File "./import_logs.py", line 13, in <module>
import bz2
ImportError: No module named bz2
我试图安装bz2模块,但我有很多错误
[spatel@dev1 python-bz2-1.1]$ /home/spatel/python-2.7.3/bin/python setup.py install
...
...
...
bz2.c:1765: error: âBZ_FINISH_OKâ undeclared (first use in this function)
bz2.c:1765: warning: comparison between pointer and integer
bz2.c:1771: error: âPyMemberDefâ has no member named âavail_outâ
bz2.c:1778: error: âPyMemberDefâ has no member named ânext_outâ
bz2.c:1778: error: âPyMemberDefâ has no member named âtotal_out_hi32â
bz2.c:1778: error: âPyMemberDefâ has no member named âtotal_out_lo32â
bz2.c:1778: error: invalid operands to binary +
bz2.c:1778: warning: statement with no effect
bz2.c:1779: error: âPyMemberDefâ has no member named âavail_outâ
bz2.c:1779: error: âPyMemberDefâ has no member named ânext_outâ
bz2.c:1779: error: invalid operands to binary -
bz2.c:1779: error: invalid operands to binary -
bz2.c:1779: warning: statement with no effect
bz2.c:1783: error: âPyMemberDefâ has no member named âavail_outâ
bz2.c:1784: error: âPyMemberDefâ has no member named âtotal_out_hi32â
bz2.c:1784: error: âPyMemberDefâ has no member named âtotal_out_lo32â
bz2.c:1784: warning: passing argument 2 of â_PyString_Resizeâ makes integer from pointer without a cast
error: command 'gcc' failed with exit status 1
可能当你从源代码构建python时,你没有bz2头文件。
在Ubuntu / Debian上安装它们:
sudo apt-get install libbz2-dev
Fedora的:
sudo yum install bzip2-devel
并再次构建python。你可能会注意到python在配置/构建时检查了很多库,如果你错过了其中一些库,你可能不会支持像你这样的bz2这样的库。
你应该得到预建的二进制文件来避免这种东西。 Ubuntu 12.04包含qazxsw poi,你的脚本需要的版本。
如果您在特定位置安装python,只需安装python 2.7.3就行不通。
centos有一个解决方法:
libbz2-dev
sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.7
sudo cp /usr/lib64/python2.7/lib-dynload/bz2.so /python_install_path/lib/python2.7
通常是python_install_path
,如果你有自定义的python路径,你需要替换它。
在CentOS 7上,安装bzip2-devel:
/usr/local/lib/python2.7/
然后重新编译python。
您需要安装bz2 c库的开发版本。您可能没有,这就是为什么在构建python的用户副本时没有安装它的原因。在Ubuntu上它是libbz2-dev包。它可能在Fedora上被命名为相同或相似。或者您可以从www.bzip.org下载。
您必须通过源代码重新安装sudo yum install bzip2-devel
:
bzip2
yum install bzip2-devel
wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar -zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
那些步骤有时候工作。
最后,我已经找到了问题,它需要/usr/local/Python-3.5.2/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so,它必须有当我通过源代码编译bzip2时出现问题。我从另一个VM复制此文件以解决问题。
我还应该在CentOS 6上添加它,确保你安装了make && make install
,而不是bzip2-devel
。
上面的解决方案可以解决python2.7的bz2问题。但不是python 3.x是的,你需要_bz2.cpython-3xm-x86_64-linux-gnu.so,但是你应该在你自己的环境中构建它。
这是我的解决方案:
在python3的源代码文件夹下的vim run.sh:Python-3.x.x.
bzip2-libs
您可以设置与您的预版本相同的前缀,这不会卸载您安装的任何软件包。在此之前,制作一个备份文件夹。