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 bsddb185
e sunaudiodev
non 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 install
per 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 ./configure
script e prima di eseguirlo make
. In Modules/Setup
ci 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