¿Cuáles son los paquetes / bibliotecas que debo instalar antes de compilar Python desde la fuente?

44

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 bsddb185y sunaudiodevmó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 installpara 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 ./configurescript y antes de ejecutarlo make. En Modules/Setuphay 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
Lennart Regebro
fuente

Respuestas:

22

Hay algunos mas. Normalmente, configure debería recordarle si falta algo, y algunos de ellos son opcionales. Aquí está mi lista:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
fuente
1
Gracias, actualizado. Configure te recuerda, pero simplemente pasa desapercibido, y a veces no es obvio qué paquete instalar.
Lennart Regebro
Aceptado como el único que realmente responde. :) Intentaré recordar agregar a esta pregunta la próxima vez que necesite instalar un Ubuntu. :)
Lennart Regebro
1
Para Ubuntu 12.04, querrás cambiar libreadline5-devalibreadline-dev
Ehtesh Choudhury
3
Más recientemente, también se deben agregar libbz2-dev y liblzma-dev.
Apalala
2
16.10 ha sido reemplazado libreadline5-devporlibreadline-gplv2-dev
jmunsch
15

Debería poder instalar todas las dependencias de compilación para Python con la build-depopción en 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
fuente
1
Eso es interesante. Pero instala un montón de cosas que claramente no son estrictamente necesarias (libsgmls-perl !?), mientras que no instala ni libz-dev ni libreadline-dev (ver arriba).
Lennart Regebro
Sin embargo, esto es muy útil cuando tú apt-get source python.
Stefano Palazzo
1
Para mí, esto también omite openssl, lo que significa que después de compilar python, no puedo instalar setuptools porque su instalador se descarga a través de https.
Jonathan Hartley
esto es lo que los documentos oficiales parecen recomendar también: docs.python.org/devguide/setup.html
hwjp
1
Para una mayor precisión, puede usar el comando sudo apt-get build-dep python3.x(reemplace 3 yx con su versión preferida según sea necesario, aunque a veces como en mi caso 3.6 todavía no estaba disponible, utilicé 3.5 en su lugar)
JxAxMxIxN
2

si quieres usar el SDK de Google App Engine:

  • OpenSll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

fabjoa
fuente
No necesita PIL para compilar Python. :)
Lennart Regebro
1

Para ejecutar ciertos tipos de pruebas necesitará python-profiler

Claytron
fuente