Quels sont les paquets / bibliothèques que je devrais installer avant de compiler Python depuis les sources?

42

De temps en temps, je dois installer un nouvel Ubuntu (je l'ai utilisé à la fois sur les ordinateurs de bureau et les serveurs) et j'oublie toujours quelques bibliothèques que j'aurais dû installer avant la compilation, ce qui signifie que je dois recompiler et que ça devient agaçant.

Maintenant, je veux faire une liste complète de tous les paquets de bibliothèque à installer avant de compiler Python (et de préférence ils sont optionnels).

C'est la liste que j'ai compilée avec l'aide ci-dessous et en creusant dans 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 optionnel:

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, donc les modules bsddb185 et sunaudiodev ne seront toujours pas construits sur Ubuntu, mais tous les autres modules sont construit 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 et 2.7, etc. Je vous recommande plutôt d’examiner pyenv . Il contient un script python-build (situé dans plugins/python-build/bin ). Avec elle, vous pouvez installer des versions Python arbitraires comme celles-ci:

$ ./python-build 2.7.8 /opt/python27

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

FIN DE LA MISE À JOUR

Python 2.5 et Python 2.6 doivent également disposer de LDFLAGS sur Ubuntu 11.04 et ultérieur, 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é le script ./configure et avant d'exécuter make . Dans Modules/Setup , il existe 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 modifier Modules / _ssl.c pour être utilisé avec OpenSSL 1.0, qui est utilisé dans Ubuntu 11.10. Vers 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 le support SSL_v2, qui semble avoir disparu dans OpenSSL1.0.

Python 2.4 (oui, il reste de vieux projets nécessitant 2.4) a besoin de ce correctif 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
    
posée Lennart Regebro 26.10.2014 - 12:11
la source

4 réponses

19

Il y en a quelques autres. Normalement, configure devrait vous rappeler si quelque chose manque, et quelques-unes d’entre elles sont facultatives. Voici ma liste:

build-essential
libncursesw5-dev
libreadline5-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev tk-dev
libbz2-dev

Notez qu'il n'est pas nécessaire d'installer les bibliothèques de développement Tk. Tk est fourni via les référentiels (pour python 2.x et python 3)

    
réponse donnée Stefano Palazzo 29.06.2015 - 19:25
la source
14

Vous devriez pouvoir installer toutes les dépendances de génération pour Python avec l'option build-dep dans 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.
    
réponse donnée Marco Ceppi 14.01.2011 - 19:22
la source
2

si vous souhaitez utiliser le SDK Google App Engine:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

    
réponse donnée fabjoa 25.01.2011 - 23:17
la source
1

Pour exécuter certains types de tests, vous aurez besoin de python-profiler

    
réponse donnée claytron 17.01.2011 - 00:33
la source

Lire d'autres questions sur les étiquettes