module Python BZ2 manquant
J'ai installé dans mon répertoire personnel.
[spatel@~ dev1]$ /home/spatel/python-2.7.3/bin/python -V
Python 2.7.3
J'essaie d'exécuter un script qui nécessitait Python 2.7.X version, et je reçois l'erreur BZ2 manquante
[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
J'ai essayé d'installer bz2 module, mais j'ai eu beaucoup d'erreur
[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
7 réponses
Probablement que vous avez construit python à partir de la source, vous n'avez pas d'en-têtes bz2.
Installez-les sur Ubuntu / Debian:
sudo apt-get install libbz2-dev
Fedora:
sudo yum install bzip2-devel
Et construire à nouveau python. Vous remarquerez peut-être que python vérifie beaucoup de bibliothèques lors de la configuration/construction, si vous en manquez certaines, vous n'obtiendrez probablement aucun support pour les bibliothèques comme bz2 sur votre cas.
Vous devriez obtenir des binaires prédéfinis pour éviter ce genre de choses. Ubuntu 12.04 packs Python 2.7.3, la version de votre script besoins.
Si vous installez python sur un emplacement spécifique, installez simplement libbz2-dev
ne fonctionnera pas.
Il existe une solution de contournement pour 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
habituellement est /usr/local/lib/python2.7/
, vous auriez besoin de le remplacer si vous avez un chemin Python personnalisé.
Sur CentOS 7, installez bzip2-devel:
sudo yum install bzip2-devel
Puis recompilez python.
Vous devez avoir la version de développement de la bibliothèque C BZ2 installée. Vous ne le faites probablement pas et c'est pourquoi il n'a pas été installé lorsque vous avez construit votre copie utilisateur de python. Sur Ubuntu, c'est le paquet libbz2-dev. Il est probablement nommé le même ou similaire sur Fedora. Ou vous pouvez le télécharger à partir de www.bzip.org.
Vous devez réinstaller bzip2
par code source:
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
make && make install
-
Configurer et recompiler python
Ces étapes fonctionnent parfois.
Enfin, j'ai compris le problème, il a besoin du/usr/local/Python-3.5.2 / lib / python3. 5 / lib-dynload/_bz2. cpython-35m-x86_64-linux-gnu. donc , Il doit avoir un problème quand je compile bzip2 par code source. Je copie ce fichier d'une autre machine virtuelle pour résoudre le problème.
Je dois également ajouter que sur CentOS 6, assurez-vous d'avoir bzip2-devel
, pas bzip2-libs
installé.
La solution ci-dessus peut résoudre les problèmes bz2 avec python2.7. mais pas python 3.x oui, vous avez besoin _bz2.cpython-3xm-x86_64-linux-gnu.so, cependant, vous devriez le construire dans votre propre env.
Voici ma solution:
- yum installer bzip2-devel. (ou apt-get)
- télécharger bzip2-1.0.6. make && make install ()
- construisez _bz2 de Python3.disponible comme ceci:
Vim run.sh sous le dossier de code source de python3: Python-3.x.x
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
Vous pouvez définir le même préfixe de votre version antérieure, cela ne supprimera Aucun paquet que vous avez installé. Et avant cela, créez un dossier de sauvegarde.