46 votes

Quels sont les paquets/bibliothèques que je dois installer avant de compiler Python à partir des sources ?

De temps en temps, je dois installer un nouvel Ubuntu (je l'ai utilisé à la fois pour les ordinateurs de 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 cela devient ennuyeux.

Je veux donc maintenant faire une liste complète de tous les paquets de bibliothèques à installer avant de compiler Python (et, de préférence, à quel point ils sont optionnels).

Voici la liste que j'ai dressée avec l'aide de ci-dessous et en creusant un peu 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 plus :

liblzma-dev

Plus d'options :

tk-dev
libdb-dev

Ubuntu n'a pas de paquets pour la version 1.8.5 de la base de données Berkeley, ni (pour des raisons évidentes) pour le matériel audio Sun. bsddb185 y sunaudiodev ne seront toujours pas construits sous Ubuntu, mais tous les autres modules seront construits avec les paquets ci-dessus installés.

MISE À JOUR

Dans Ubuntu 14.04, il y a encore plus de correctifs nécessaires pour Python 2.6, et 2.7, etc. Je recommanderais plutôt de vérifier pyenv . Il contient un script. python-build (situé à plugins/python-build/bin ). Il permet d'installer des versions arbitraires de Python :

$ ./python-build 2.7.8 /opt/python27

Où 2.7.8 est la version et /opt/python27 est le chemin d'accès, il sera installé. Pyenv téléchargera la version de Python, appliquera les correctifs nécessaires et configure; make; make install pour vous.

END UPDATE

Python 2.5 et Python 2.6 doivent également avoir LDFLAGS sur Ubuntu 11.04 et plus, pour gérer la nouvelle disposition 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é la commande ./configure script et avant d'exécuter make . En 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 a également besoin de Modules/_ssl.c modifiés pour être utilisés avec OpenSSL 1.0, qui est utilisé dans Ubuntu 11.10. Aux alentours 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 */

Remplacez cela par :

    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 le support de SSL_v2, qui a apparemment disparu dans OpenSSL1.0.

Python 2.4 (oui, j'ai encore quelques vieux projets qui ont besoin de 2.4) a besoin de ce patch pour setup.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

25voto

andybee Points 497

Il y en a quelques autres. Normalement, la configuration devrait vous rappeler s'il manque quelque chose, et quelques-uns d'entre eux sont facultatif. Voici ma liste :

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev

15voto

Redbaron Points 523

Vous devriez être en mesure d'installer toutes les dépendances de construction pour Python avec l'option build-dep dans l'option apt-get

sudo apt-get build-dep python

    build-dep
       build-dep causes apt-get to install/remove packages in an attempt
       to satisfy the build dependencies for a source package.

2voto

Rafael Oliveira Points 121

Si vous souhaitez utiliser le SDK de Google App Engine :

  • s'ouvre
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

LIP 1.1.7

)

1voto

Neumann Points 111

Pour effectuer certains types de tests, vous aurez besoin python-profiler

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X