2012-10-09 180 views
24

我已經安裝在我的主目錄下。缺少python bz2模塊

[[email protected]~ dev1]$ /home/spatel/python-2.7.3/bin/python -V 
Python 2.7.3 

我試圖運行的需要蟒蛇2.7.x版本的一個劇本,我收到失蹤BZ2錯誤

[[email protected]~ 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模塊,但我得到了很多錯誤

[[email protected] 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 

回答

49

也許你從源碼構建python,你沒有bz2頭。

在Ubuntu/Debian的安裝:

sudo apt-get install libbz2-dev 

的Fedora:

sudo yum install bzip2-devel 

並再次打造蟒蛇。 你可能注意到python在配置/構建時檢查了很多庫,如果你錯過了其中的一些庫,你可能會得不到像bz2這樣的庫的支持。

你應該得到預構建的二進制文件,以避免這種東西。 Ubuntu 12.04包python 2.7.3,您的腳本需要的版本。

+5

Fedora包是bzip2-devel(至少從Fedora 14開始) –

+0

謝謝,更新:) – jviotti

+1

我必須安裝所有這些才能在CentOS6.4上構建一個可工作的python2.7。 yum install -y bzip2-devel zlib zlib-devel openssl openssl-devel – jamshid

3

您需要安裝bz2 c庫的開發版本。你可能不這樣做,這就是爲什麼當你構建你的python用戶副本時它沒有被安裝。在Ubuntu上,它是libbz2-dev軟件包。它可能在Fedora上被命名爲相同或相似。或者你可以從www.bzip.org下載它。

3

在CentOS 7,安裝bzip2的-devel的:

sudo yum install bzip2-devel 

然後重新編譯蟒蛇。

+0

適用於CentOS 6以及 – trinth

2

必須通過源代碼重新安裝bzip2

  1. yum install bzip2-devel

  2. wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

  3. tar -zxvf bzip2-1.0.6.tar.gz

  4. cd bzip2-1.0.6

  5. make && make install

  6. 配置和重新編譯蟒蛇

那些有時工作步驟。

最後,我想出了這個問題,它需要/usr/local/Python-3.5.2/ lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu。所以,當我通過源代碼編譯bzip2時,它一定有問題。我從另一個虛擬機複製這個文件來解決問題。

+0

請問您可以共享python3的文件嗎?謝謝.. –

+0

ImportError:動態模塊沒有定義模塊導出函數(PyInit_bz2) –

+0

'stackoverflow.com/questions/13915137/how-do-you-assign-bz2-to-an-altinstall-of-python'救救我 –

8

如果您在特定位置安裝python,只需安裝libbz2-dev將無法​​正常工作。

沒有爲CentOS解決方法:

  • CentOS 6的

    sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.7 
    
  • Centos的7

    sudo cp /usr/lib64/python2.7/lib-dynload/bz2.so /python_install_path/lib/python2.7 
    

python_install_path通常是/usr/local/lib/python2.7/,你會東東d替換,如果你有自定義的Python路徑。

+0

這個解決方案對我來說非常合適。我無法爲python腳本導入bzip2,直到我將此bz2.so文件從系統安裝複製到我的virtualenv文件夾中。 – user2856414

+0

我一直在使用這個解決方案,直到我讀到其他評論並在構建python 2.7.14之前安裝了bzip2-devel。 – trinth

+0

我在Python3中,並得到錯誤:ImportError:動態模塊沒有定義模塊導出函數(PyInit_bz2) –

1

我還應該在CentOS 6上添加一下,確保你已經安裝了bzip2-devel而不是bzip2-libs

1

上面的解決方案可以解決python2.7的bz2問題。但不是python 3.x 是的,你需要_bz2.cpython-3xm-x86_64-linux-gnu.so,但是你應該在你自己的env中構建它。

這裏是我的解決方案:

  1. 百勝安裝的bzip2-devel的。 (或apt-get)
  2. 下載bzip2-1.0.6。使& & make install的()
  3. 建立Python3的_bz2.cpython是這樣的:在python3的源代碼文件夾

VIM run.sh:Python的3.xx的

export CFLAGS="-I/usr/include" 
export LDFLAGS="-L/usr/lib64" 
export LD_LIBRARY_PATH=/usr/lib64 
make distclean 
./configure --prefix=/home/xxx/Python3 && make && make install 

你可以設置前綴與您的pre版本相同,不會取消您安裝的任何軟件包。在此之前,製作一個備份文件夾。