Quali sono i pacchetti / librerie che dovrei installare prima di compilare Python dal sorgente?


44

Di tanto in tanto devo installare un nuovo Ubuntu (l'ho usato sia per desktop che per server) e dimentico sempre un paio di librerie che avrei dovuto installare prima della compilazione, il che significa che devo ricompilare, e sta diventando fastidioso.

Quindi ora voglio fare un elenco completo di tutti i pacchetti di librerie da installare prima di compilare Python (e preferibilmente quanto sono opzionali).

Questa è la lista che ho compilato con l'aiuto qui sotto e scavando setup.py. È completo per Ubuntu 10.04 e 11.04 almeno:

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

Per Python 3.2 e versioni successive:

liblzma-dev

Più opzionale:

tk-dev
libdb-dev

Ubuntu non ha pacchetti per v1.8.5 del database Berkeley, né (per ovvi motivi) l'hardware audio Sun, quindi i moduli bsddb185e sunaudiodevnon saranno ancora compilati su Ubuntu, ma tutti gli altri moduli sono costruiti con i pacchetti sopra installati.

AGGIORNARE

Ci sono in Ubuntu 14.04 ancora più patch necessarie per Python 2.6, 2.7 e così via. Raccomanderei invece di controllare pyenv . Contiene uno script python-build(situato in plugins/python-build/bin). Con esso puoi installare versioni di Python arbitrarie come questa:

$ ./python-build 2.7.8 /opt/python27

Dove 2.7.8 è la versione e / opt / python27 è il percorso che verrà installato. Pyenv scaricherà la versione di Python, applicherà le patch necessarie e configure; make; make installper te.

AGGIORNAMENTO FINE

Anche Python 2.5 e Python 2.6 devono avere LDFLAGS impostato su Ubuntu 11.04 e versioni successive, per gestire il nuovo layout multi-arco:

export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"

Per Python 2.6, 2.7 e 3.0 è inoltre necessario abilitare esplicitamente SSL dopo aver eseguito lo ./configurescript e prima di eseguirlo make. In Modules/Setupci sono linee come questa:

#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto

Rimuovi il commento da queste righe e modifica la variabile SSL in /usr:

SSL=/usr
_ssl _ssl.c \
       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
       -L$(SSL)/lib -lssl -lcrypto

Python 2.6 e 3.0 hanno anche bisogno di Modules / _ssl.c modificati per essere usati con OpenSSL 1.0, che è usato in Ubuntu 11.10. Intorno alla linea 300 troverai questo:

    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 */

Cambialo in:

    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 */

Questo disabilita il supporto SSL_v2, che apparentemente è andato in OpenSSL1.0.

Python 2.4 (sì, ho ancora alcuni vecchi progetti che richiedono 2.4) ha bisogno di questa patch per 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

E deve essere compilato con:

env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu"  ./configure --prefix=/opt/python2.4

Risposte:


22

Ce ne sono alcuni altri. Normalmente, configure dovrebbe ricordare se manca qualcosa e alcuni di essi sono opzionali. Ecco la mia lista:

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

1
Grazie, aggiornato Configura ti ricorda, ma scompare e talvolta non è ovvio quale pacchetto installare.
Lennart Regebro,

Accettato come l'unico effettivamente rispondendo. :) Cercherò di ricordare di aggiungere a questa domanda la prossima volta che dovrò installare un Ubuntu. :)
Lennart Regebro,

1
Per Ubuntu 12.04, ti consigliamo di passare libreadline5-devalibreadline-dev
Ehtesh Choudhury

3
Più recentemente, dovrebbero essere aggiunti anche libbz2-dev e liblzma-dev.
Apalala,

2
16.10 è stato sostituito libreadline5-devdalibreadline-gplv2-dev
jmunsch il

15

Dovresti essere in grado di installare tutte le dipendenze di build per Python con l' build-depopzione in 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.

1
Interessante. Ma installa un sacco di cose che non sono strettamente necessarie (libsgmls-perl !?), mentre non installa né libz-dev né libreadline-dev (vedi sopra).
Lennart Regebro,

Questo è molto utile quando tu apt-get source python.
Stefano Palazzo

1
Per me, questo omette anche openssl, il che significa che dopo aver creato Python, non riesco a installare setuptools perché il suo programma di installazione viene scaricato su https.
Jonathan Hartley,

questo è ciò che sembrano suggerire anche i documenti ufficiali: docs.python.org/devguide/setup.html
hwjp

1
Per una maggiore precisione puoi usare il comando sudo apt-get build-dep python3.x(sostituisci 3 e x con la tua versione preferita, se necessario, anche se a volte come nel mio caso 3.6 non era ancora disponibile, quindi ho usato 3.5 invece)
JxAxMxIxN

2

se desideri utilizzare l'SDK di Google App Engine:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)


Non hai bisogno di PIL per compilare Python. :)
Lennart Regebro,

1

Per eseguire determinati tipi di test è necessario python-profiler

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.