2012-10-09 22 views
24

Ho installato nella mia home directory.missing pyton bz2 module

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

Sto cercando di eseguire uno script che richiede la versione 2.7.x di pitone, e io sono sempre mancante errore 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 

Ho provato ad installare il modulo bz2 ma ho avuto un sacco di errori

[[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 

risposta

49

Probabilmente quando hai creato python dal sorgente, non hai intestazioni bz2.

loro installazione su Ubuntu/Debian:

sudo apt-get install libbz2-dev 

Fedora:

sudo yum install bzip2-devel 

e costruire di nuovo pitone. Si può notare che Python controlla molte librerie quando si configura/costruisce, se si dimenticano alcune di esse probabilmente non si otterrà supporto per librerie come bz2 sul proprio caso.

Si dovrebbero ottenere i binari prebuild per evitare questo tipo di cose. Ubuntu 12.04 pacchetti python 2.7.3, la versione richiesta dallo script.

+5

Il pacchetto Fedora è bzip2-devel (almeno come da Fedora 14) –

+0

Grazie, aggiornato :) – jviotti

+1

Ho dovuto installare tutto questo per costruire un python2.7 funzionante su CentOS6.4. yum install -y bzip2-devel zlib-devel openssl openssl-devel – jamshid

3

È necessario disporre della versione di sviluppo della libreria bz2 c installata. Probabilmente no e per questo motivo non è stato installato quando hai creato la tua copia utente di python. Su Ubuntu è il pacchetto libbz2-dev. Probabilmente è chiamato lo stesso o simile su Fedora. Oppure puoi scaricarlo da www.bzip.org.

3

su CentOS 7, installare bzip2-devel:

sudo yum install bzip2-devel 

Poi ri-compilare Python.

+0

Vale anche per CentOS 6 – trinth

2

È necessario reinstallare bzip2 dal codice sorgente:

  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. configurare e ri compilare python

quei passi di lavoro a volte.

Infine, ho capito il problema, ha bisogno di /usr/local/Python-3.5.2/ lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu. quindi, deve avere un problema quando compilo bzip2 per codice sorgente. Copio questo file da un'altra VM per risolvere il problema.

+0

Puoi condividere il file così per python3? Grazie .. –

+0

ImportError: il modulo dinamico non definisce la funzione di esportazione del modulo (PyInit_bz2) –

+0

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

8

Se si installa Python su una posizione specifica, installare libbz2-dev non funzionerà.

C'è una soluzione per 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 solito è /usr/local/lib/python2.7/, si nee d sostituisci questo se hai un percorso python personalizzato.

+0

Questa soluzione ha funzionato perfettamente per me. Non sono stato in grado di importare bzip2 per uno script python finché non ho copiato questo file bz2.so dall'installazione del sistema nella mia cartella virtualenv. – user2856414

+0

Stavo usando questa soluzione fino a quando ho letto l'altro commento e installato bzip2-devel prima di creare python 2.7.14. – trinth

+0

Sono in Python3 e ottengo errore: ImportError: il modulo dinamico non definisce la funzione di esportazione del modulo (PyInit_bz2) –

1

Devo anche aggiungere che su CentOS 6, assicurati di avere bzip2-devel, non bzip2-libs installato.

1

la soluzione sopra può risolvere problemi di bz2 con python2.7. ma non python 3.x sì, hai bisogno di _bz2.cpython-3xm-x86_64-linux-gnu.so, tuttavia dovresti costruirlo nel tuo stesso ambiente.

Ecco la mia soluzione:

  1. yum install bzip2-devel. (o apt-get)
  2. scarica bzip2-1.0.6. fare & & make install()
  3. costruire _bz2.cpython di python3 come questo:

vim run.sh nella cartella del codice sorgente di python3: 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 

è possibile impostare il prefisso lo stesso della tua versione pre, che non separerà alcun pacchetto che hai installato. E prima, crea una cartella di backup.