web-dev-qa-db-fra.com

construire Python à partir des sources avec le support zlib

Lors de la création de Python 3.2.3 à partir du source sur Ubuntu 12.04, le module zlib n'est pas disponible.

J'ai téléchargé la distribution source officielle de python.org et tenté de la construire et de l'installer avec les commandes suivantes.

tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
Sudo make install

La sortie de la commande make comprend les éléments suivants.

Python build finished, but the necessary bits to build these modules were not found:
_curses            _curses_panel      _dbm            
_gdbm              _sqlite3           _ssl            
_tkinter           bz2                readline        
zlib                                            

Après avoir exécuté make install et démarré l'interpréteur, le module zlib ne peut pas être importé.

J'ai confirmé que le package zlib1g-dev est installé sur mon système.

J'ai également trouvé cette question similaire , qui suggère d'ajouter l'indicateur --with-zlib à la commande ./configure. Cependant, cela renvoie une erreur indiquant qu'il s'agit d'une option non reconnue et sans effet.

40
joshayers

La solution consiste à installer le paquet Ubuntu dpkg-dev.

Sudo apt-get install dpkg-dev

La raison est expliquée ici

En bref, les versions récentes d'Ubuntu ne stockent pas libz.so dans l'emplacement standard /usr/lib, mais plutôt dans un emplacement spécifique à la plate-forme. Par exemple, sur mon système, il est en /usr/lib/x86_64-linux-gnu. Cela empêche le système de construction de Python de le trouver.

Le package dpkg-dev installe l'exécutable dpkg-architecture, ce qui permet à Python de rechercher les bibliothèques nécessaires.

La question initiale concernait Python 3.2.3. J'ai également téléchargé Python 2.7.3 et confirmé que le même problème existait, et que cette solution lui est également applicable.

15
joshayers

J'ai eu un problème similaire sur CentOS 6.3 et python 3.2.3

Je l'ai résolu par: 

Éditez /Modules/Setup et décommentez la ligne: 

zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

accédez au répertoire/Modules/zlib:

./configure
make
Sudo make install

puis compilé ma source python3.2.

et a ensuite pu tester import zlib et tout a bien fonctionné :) 

79
asanadi

J'utilise CentOS 6.6 et recevais des erreurs zlib. Aucune des autres réponses proposées ici ne fonctionnait pour moi (y compris la correction pour CentOS 6.3 de la suppression d'une ligne dans les modules/Setup). Je l'ai corrigé en utilisant les commandes suivantes.

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

Ensuite, configurez et installez python comme suit:

./configure --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

Je peux maintenant importer zlib dans /usr/local/bin/python2.7 sans aucun problème.

Ces instructions sont légèrement modifiées par rapport à un article trouvé ici.

17
jhrf

J'avais la même erreur en travaillant sur MAC 

Ma version MAC OS 

$ uname -v
Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64

python3.4 est utilisé ici 

Problèmes)

  1. zlib non disponible lors de l'utilisation de python3.4

    $ python3.4 get-pip.py Traceback (l'appel le plus récent en dernier): Fichier "get-pip.py", ligne 20204, dans principale() Fichier "get-pip.py", ligne 152, dans le fichier principal bootstrap (tmpdir = tmpdir) Fichier "get-pip.py", ligne 82, dans le fichier bootstrap Import pip zipimport.ZipImportError: impossible de décompresser les données; zlib non disponible

  2. La reconstruction de Python échoue

    ./configure --with-zlib-dir =/usr/local/lib

... configure: ATTENTION: options non reconnues: --with-zlib-dir ...

Solution

  1. Assurez-vous que zlib est installé . Par défaut, il sera installé dans/usr/lib

    ls /usr/lib/libz.*

S'il n'est pas installé, A. téléchargez et installez i) à partir du site zlib.net ou ii) à partir d'un dépôt Git comme ci-dessous 

git clone https://github.com/madler/zlib.git 

ou iii). Utilisez la source zlib dans le répertoire source python Modules/zlib

b. Installez zlib

./configure --prefix=/usr/local
make
Sudo make install 

2.Modifiez/Module/Setup en supprimant la mise en commentaire de la ligne ci-dessous .__ " 

3.Rebuild the Python3.4 à partir de source

cd ${PYTHON_SRC_CODE_DIR}  
./configure --prefix=${PYTHON_HOME_DIR}
make
Sudo make install 

4. Confirmez l'installation .__ Veuillez noter que gzip dépend de zlib. 

nbr_repeation=100
f=open("some_file.txt","at")
for line in range(nbr_repeation): 
    print('[{}] This file will be compressed using python zlib/gzipmodule'.format(line),file=f)

f.close()
f=open("some_file.txt","rt")
import gzip
gz=gzip.open('some_file.gz', 'wt') 
for line in f : gz.write(line)

gz.close() # Like to be clean exit
f.close()  # Like a clean exit

"""confirm the creation of the compressed gzip files"""
import os
print([ (file,os.stat(file)[6],"bytes") for file in os.listdir(".") if file.startswith("some")])
3
Adebiyi Abdurrahman

La seule solution qui m'a aidé à installer Python 3.5.1 était d'apt-get zlib1g-dev (et d'autres paquets tels que python-setuptools et python-pip), puis de reconstruire python 3.5.1 à partir du code source.

Sudo apt-get update
Sudo apt-get upgrade
Sudo apt-get dist-upgrade
Sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
Sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
Sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
Sudo apt-get install libssl-dev openssl
cd ~
mkdir build
cd build
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
tar -zxvf Python-3.5.1.tgz
cd Python-3.5.1
./configure
make
Sudo make install

Extrait de: https://github.com/MrYsLab/xideco/wiki/Installing-Python-3.5

Comme je comprends la nouvelle construction de python est faite avec l’inclusion de paquets liés précédemment avec apt-getted . Ainsi, lorsque vous parcourez le contenu des nouveaux paquets Python-3.5.1/lib/site, il y aura pip et setuptools. Plus important encore, ils seront copiés sur tous les virtualenv que vous ferez avec Python-3.5.1 ET ce virtualenv utilisera THEM à partir du système par défaut. Ceci est très, très important à retenir lors de l'installation de la nouvelle version de Python. Sinon, on pourrait se retrouver dans un trou noir d'erreurs telles que:

  • zlib pas installé;
  • "pip install ..." exécuté à partir de virtualenv qui installe le paquet sur python par défaut du système au lieu de virtualenv.
3
Kshatra

La solution la plus simple que j'ai trouvée est sur python.org :

Sudo apt-get build-dep python3.6

Si ce paquet n’est pas disponible pour votre système, essayez de réduire la version mineure jusqu’à ce que vous trouviez un paquet disponible dans le gestionnaire de paquets de votre système.

Si vous voyez quelque chose comme ceci: E: You must put some ‘source’ URIs in your sources.list, ouvrez Logiciel et mises à jour et activez le code source.

J'ai essayé d'expliquer les détails, sur un article de blog .

2
shibli049

Sudo apt-get install zlib1g-dev

est ce qui a fonctionné pour moi.

1
Hazzles
Sudo apt-get install build-essential python-dev

Même si python-dev est pour python2.7, il apportera toujours toutes les dépendances nécessaires.

Vous devrez ensuite faire:

./configure
make
Sudo make install

Pour reconstruire python3

1
freshnewpage

Si vous essayez d'utiliser une variable zlib non système/non standard (par exemple, créez votre propre source), assurez-vous de passer à la fois CPPFLAGS (pas CFLAGS!) Et LDFLAGS à ./configure. Par exemple, si votre zlib est dans /opt/zlib:

./configure CPPFLAGS='-I/opt/zlib/include' LDFLAGS='-L/opt/zlib/lib'
make
Sudo make install

J'ai fini par descendre dans le terrier des lapins en essayant de comprendre pourquoi notre Python ne fonctionnait pas avec le support zlib et j'ai découvert que le code_cpython setup.py ne consulte pas CFLAGS pour les répertoires d'inclusion, uniquement CPPFLAGS: https: // github.com/python/cpython/blob/master/setup.py#L562

0
Josh Glendenning