De vez en cuando necesito instalar un nuevo Ubuntu (lo usé tanto para escritorio como para servidores) y siempre olvido un par de bibliotecas que debería haber instalado antes de compilar, lo que significa que tengo que volver a compilar, y se está volviendo molesto.
Así que ahora quiero hacer una lista completa de todos los paquetes de la biblioteca para instalar antes de compilar Python (y preferiblemente qué tan opcionales son).
Esta es la lista que compilé con la siguiente ayuda y profundizando setup.py
. Está completo para Ubuntu 10.04 y 11.04 al menos:
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
Para Python 3.2 y posterior:
liblzma-dev
Más opcional:
tk-dev
libdb-dev
Ubuntu no tiene paquetes para v1.8.5 de la base de datos Berkeley, ni (por razones obvias) el hardware de audio Sol, por lo que el bsddb185
y sunaudiodev
módulos todavía no será construido en Ubuntu, pero todos los demás módulos están construidos con los paquetes anteriores instaladas.
ACTUALIZAR
Hay en Ubuntu 14.04 incluso más parches necesarios para Python 2.6 y 2.7, etc. Recomendaría en cambio retirar pyenv . Contiene un script python-build
(ubicado en plugins/python-build/bin
). Con él puedes instalar versiones arbitrarias de Python como esta:
$ ./python-build 2.7.8 /opt/python27
Donde 2.7.8 es la versión y / opt / python27 es la ruta en la que se instalará. Pyenv descargará la versión de Python, aplicará los parches necesarios y configure; make; make install
para usted.
ACTUALIZACIÓN FINAL
Python 2.5 y Python 2.6 también necesitan tener LDFLAGS configurado en Ubuntu 11.04 y posterior, para manejar el nuevo diseño de múltiples arcos:
export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
Para Python 2.6, 2.7 y 3.0, también debe habilitar explícitamente SSL después de ejecutar el ./configure
script y antes de ejecutarlo make
. En Modules/Setup
hay líneas como esta:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
Descomente estas líneas y cambie la variable SSL a /usr
:
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Python 2.6 y 3.0 también necesita módulos modificados / _ssl.c para usarse con OpenSSL 1.0, que se usa en Ubuntu 11.10. Alrededor de la línea 300 encontrarás esto:
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 */
Cambia eso a:
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 */
Esto deshabilita el soporte SSL_v2, que aparentemente desapareció en OpenSSL1.0.
Python 2.4 (sí, todavía tengo algunos proyectos antiguos que necesitan 2.4) necesita este parche para 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
Y necesita ser compilado con:
env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu" ./configure --prefix=/opt/python2.4