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

44

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 bsddb185et sunaudiodevne 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 installpour 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 ./configurescript et avant de l'exécuter make. Dans Modules/Setupil 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
Lennart Regebro
la source

Réponses:

22

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
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
la source
1
Merci, mis à jour. Configure vous le rappelle, mais cela ne fait que passer, et parfois le choix du paquet à installer n’est pas évident.
Lennart Regebro le
Accepté comme seul répondant réellement. :) J'essaierai de ne pas oublier d'ajouter à cette question la prochaine fois que je devrai installer Ubuntu. :)
Lennart Regebro le
1
Pour Ubuntu 12.04, vous aurez envie de changer libreadline5-devàlibreadline-dev
Ehtesh Choudhury
3
Plus récemment, libbz2-dev et liblzma-dev devraient également être ajoutés.
Apalala
2
16.10 a remplacé libreadline5-devparlibreadline-gplv2-dev
jmunsch
15

Vous devriez pouvoir installer toutes les dépendances de construction pour Python avec l' build-depoption d' 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.
Marco Ceppi
la source
1
C'est intéressant. Mais il installe des charges de choses qui ne sont clairement pas strictement nécessaires (libsgmls-perl!?), Alors qu’il n’installe ni libz-dev ni libreadline-dev (voir ci-dessus).
Lennart Regebro le
Ceci est très utile quand vous apt-get source python.
Stefano Palazzo
1
Pour moi, cela omet aussi openssl, ce qui signifie qu'après avoir construit python, je ne peux pas installer setuptools car son programme d'installation se télécharge via https.
Jonathan Hartley
c'est ce que la documentation officielle semble aussi recommander: docs.python.org/devguide/setup.html
hwjp
1
Pour plus de précision, vous pouvez utiliser la commande sudo apt-get build-dep python3.x(remplacez 3 et x par la version que vous préférez, bien que parfois, comme dans mon cas, la version 3.6 ne soit pas encore disponible, j'ai donc utilisé la version 3.5 à la place).
JxAxMxIxN
2

si vous souhaitez utiliser le SDK de Google App Engine:

  • ouvre tout
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

Fabjoa
la source
Vous n'avez pas besoin de PIL pour compiler Python. :)
Lennart Regebro le
1

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

Claytron
la source