web-dev-qa-db-fra.com

Quels sont les packages / bibliothèques à installer avant de compiler Python à partir des sources?

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 paquets de bibliothèque à installer avant de compiler Python (et de préférence, leur faculté).

Voici 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 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. Par conséquent, les modules bsddb185 et sunaudiodev ne seront toujours pas construits sur Ubuntu, mais tous les autres modules sont construits avec les packages ci-dessus installés.

UPDATE

Il existe dans Ubuntu 14.04 encore plus de correctifs nécessaires pour Python 2.6, et 2.7, etc. Je recommanderais plutôt de passer à la caisse pyenv . Il contient un script python-build (situé dans plugins/python-build/bin). Avec lui, 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 téléchargera la version Python, appliquera les correctifs nécessaires et configure; make; make install pour vous.

END UPDATE

Python 2.5 et Python 2.6 doivent également définir LDFLAGS sur Ubuntu 11.04 et les versions ultérieures pour gérer la nouvelle présentation multi-arches:

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 l'exécution du script ./configure et avant l'exécution de 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
43
Lennart Regebro

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

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

Vous devriez pouvoir installer toutes les dépendances de construction de 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.
15
Marco Ceppi

si vous souhaitez utiliser le SDK de Google App Engine:

  • libssl-dev build-essential
  • libsqlite3-dev zlib1g zlib1g-dev

pIL 1.1.7

:)

2
fabjoa

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

1
claytron