De temps en temps, j'ai besoin d'installer une nouvelle Ubuntu (je l'ai utilisée à la fois pour le bureau et les serveurs) et j'oublie toujours quelques bibliothèques que j'aurais dû installer avant de compiler, ce qui signifie que je dois recompiler, et ça devient ennuyeux.
Alors maintenant, je veux faire une liste complète de tous les paquetages de bibliothèque à installer avant de compiler Python (et de préférence leur faculté optionnelle).
C’est la liste que j’ai compilé avec l’aide ci-dessous et en creusant setup.py
. Il est complet pour Ubuntu 10.04 et 11.04 au moins:
build-essential (obviously)
libz-dev (also pretty common and essential)
libreadline-dev (or the Python prompt is crap)
libncursesw5-dev
libssl-dev
libgdbm-dev
libsqlite3-dev
libbz2-dev
Pour Python 3.2 et versions ultérieures:
liblzma-dev
Plus facultatif:
tk-dev
libdb-dev
Ubuntu n’a pas de paquet pour la v1.8.5 de la base de données Berkeley, ni (pour des raisons évidentes) le matériel audio Sun; les modules bsddb185
et sunaudiodev
ne seront donc toujours pas construits sur Ubuntu, mais tous les autres modules sont construits avec les paquets ci-dessus installés.
MISE À JOUR
Il y a dans Ubuntu 14.04 encore plus de correctifs nécessaires pour Python 2.6, 2.7, etc. Je recommanderais plutôt de vérifier pyenv . Il contient un script python-build
(situé dans plugins/python-build/bin
). Avec cela, vous pouvez installer des versions Python arbitraires comme ceci:
$ ./python-build 2.7.8 /opt/python27
Où 2.7.8 est la version et / opt / python27 le chemin d’installation. Pyenv va télécharger la version Python, appliquer les correctifs nécessaires et configure; make; make install
pour vous.
FIN MISE À JOUR
LDFLAGS doit également être défini sur Ubuntu 11.04 et les versions ultérieures de Python 2.5 et 2.6 afin de gérer la nouvelle présentation multi-arch:
export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
Pour Python 2.6, 2.7 et 3.0, vous devez également activer explicitement SSL après avoir exécuté le ./configure
script et avant de l'exécuter make
. Dans Modules/Setup
il y a des lignes comme celle-ci:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
Décommentez ces lignes et remplacez la variable SSL par /usr
:
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Python 2.6 et 3.0 ont également besoin de Modules / _ssl.c modifiés pour pouvoir être utilisés avec OpenSSL 1.0, qui est utilisé dans Ubuntu 11.10. Aux environs de la ligne 300, vous trouverez ceci:
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
Changer cela en:
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
Cela désactive la prise en charge de SSL_v2, qui a apparemment disparu dans OpenSSL1.0.
Python 2.4 (oui, il me reste encore d'anciens projets nécessitant la version 2.4) a besoin de ce correctif pour installer.py:
--- setup.py 2006-10-08 19:41:25.000000000 +0200
+++ setup.py 2012-05-08 14:02:14.325174357 +0200
@@ -269,6 +269,7 @@
lib_dirs = self.compiler.library_dirs + [
'/lib64', '/usr/lib64',
'/lib', '/usr/lib',
+ '/usr/lib/x86_64-linux-gnu'
]
inc_dirs = self.compiler.include_dirs + ['/usr/include']
exts = []
@@ -496,7 +497,8 @@
ssl_incs += krb5_h
ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
['/usr/local/ssl/lib',
- '/usr/contrib/ssl/lib/'
+ '/usr/contrib/ssl/lib/',
+ 'x86_64-linux-gnu'
] )
if (ssl_incs is not None and
Et il doit être compilé avec:
env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu" ./configure --prefix=/opt/python2.4