2012-10-09 26 views
24

He instalado en mi directorio de inicio.falta el módulo python bz2

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

Estoy intentando ejecutar un script que requiere la versión 2.7.x de pitón, y me estoy haciendo falta de error 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 

he tratado de instalar el módulo bz2 pero me dio un montón de errores

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

Respuesta

49

Probablemente como has creado python desde el código fuente, no tienes los encabezados bz2.

instalarlos en Ubuntu/Debian:

sudo apt-get install libbz2-dev 

Fedora:

sudo yum install bzip2-devel 

y construir pitón de nuevo. Puede observar que python comprueba muchas bibliotecas durante la configuración/creación, si se olvida de algunas de ellas, probablemente no obtenga soporte para libs como bz2 en su caso.

Deberías obtener binarios de prebuild para evitar este tipo de cosas. Ubuntu 12.04 paquetes python 2.7.3, la versión que necesita tu script.

+5

El paquete de Fedora es bzip2-devel (al menos desde Fedora 14) –

+0

Gracias, actualizado :) – jviotti

+1

Tuve que instalar todo esto para construir un python2.7 en funcionamiento en CentOS6.4. yum install -y bzip2-devel zlib zlib-devel openssl openssl-devel – jamshid

3

Necesita tener instalada la versión de desarrollo de la biblioteca bz2 c. Probablemente no lo haga y es por eso que no fue instalado cuando construyó su copia de usuario de Python. En Ubuntu, es el paquete libbz2-dev. Probablemente sea nombrado igual o similar en Fedora. O puede descargarlo desde www.bzip.org.

3

en CentOS 7, instale bzip2-devel:

sudo yum install bzip2-devel 

Entonces pitón volver a compilar.

+0

Se aplica a CentOS 6 también – trinth

2

Debe reinstalar bzip2 por código fuente:

  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. configurar y volver a compilar Python

los pasos de trabajo a veces.

Por último, he descubierto el problema, se necesita la /usr/local/Python-3.5.2/ lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu. así que, debe tener un problema cuando compilo bzip2 por código fuente. Copio este archivo de otra máquina virtual para resolver el problema.

+0

¿Podría compartir el archivo so para python3? Gracias .. –

+0

ImportError: el módulo dinámico no define la función de exportación de módulos (PyInit_bz2) –

+0

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

8

Si instala python en una ubicación específica, simplemente instale libbz2-dev no funcionaría.

Hay una solución para esta versión:

  • 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 por lo general es /usr/local/lib/python2.7/, usted nee d reemplace eso si tiene una ruta personalizada de python.

+0

Esta solución funcionó perfectamente para mí. No pude importar bzip2 para una secuencia de comandos python hasta que copié sobre este archivo bz2.so desde la instalación del sistema en mi carpeta virtualenv. – user2856414

+0

Estaba usando esta solución hasta que leí el otro comentario e instalé bzip2-devel antes de compilar Python 2.7.14. – trinth

+0

Estoy en Python3 y obtengo el error: ImportError: el módulo dinámico no define la función de exportación del módulo (PyInit_bz2) –

1

También debo agregar que en CentOS 6, asegúrese de tener bzip2-devel, no bzip2-libs instalado.

1

la solución anterior puede resolver problemas bz2 con python2.7. pero no Python 3.x sí, necesitas _bz2.cpython-3xm-x86_64-linux-gnu.so, sin embargo, debes compilarlo en tu propio entorno.

aquí está mi solución:

  1. yum install bzip2-devel. (o apt-get)
  2. descarga bzip2-1.0.6. hacer & & make install()
  3. construir _bz2.cpython de python3 así: run.sh

vim en la carpeta de código fuente python3: Pitón-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 

puede establecer el prefijo lo mismo de su versión previa, que no desvinculará ningún paquete que haya instalado. Y antes de eso, crea una carpeta de respaldo.