Quais são os pacotes / bibliotecas que devo instalar antes de compilar o Python a partir do código-fonte?

44

De vez em quando eu preciso instalar um novo Ubuntu (usei-o tanto para desktop quanto para servidores) e sempre esqueço algumas bibliotecas que eu deveria ter instalado antes da compilação, o que significa que tenho que recompilar e está ficando chato.

Então agora eu quero fazer uma lista completa de todos os pacotes de bibliotecas a serem instalados antes de compilar o Python (e preferencialmente como opcionais).

Esta é a lista que eu compilei abaixo da ajuda e cavando setup.py. Está completo para o Ubuntu 10.04 e 11.04 pelo 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 e posterior:

liblzma-dev

Mais opcional:

tk-dev
libdb-dev

O Ubuntu não possui pacotes para a v1.8.5 do banco de dados de Berkeley, nem (por razões óbvias) o hardware de áudio da Sun; portanto, os módulos bsddb185e sunaudiodevainda não serão construídos no Ubuntu, mas todos os outros módulos são construídos com os pacotes acima instalados.

ATUALIZAR

Existem no Ubuntu 14.04 ainda mais patches necessários para Python 2.6 e 2.7, etc. Eu recomendaria fazer o checkout do pyenv . Ele contém um script python-build(localizado em plugins/python-build/bin). Com ele, você pode instalar versões arbitrárias do Python assim:

$ ./python-build 2.7.8 /opt/python27

Onde 2.7.8 é a versão e / opt / python27 é o caminho em que será instalado. O Pyenv fará o download da versão do Python, aplicará os patches necessários e configure; make; make installpara você.

ATUALIZAÇÃO FINAL

O Python 2.5 e o Python 2.6 também precisam ter o LDFLAGS definido no Ubuntu 11.04 e posterior, para lidar com o novo layout de vários arcos:

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

Para Python 2.6, 2.7 e 3.0, você também precisa habilitar explicitamente o SSL depois de executar o ./configurescript e antes de executar make. Em Modules/Setuphá linhas como este:

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

Remova o comentário dessas linhas e altere a variável SSL para /usr:

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

O Python 2.6 e 3.0 também precisa do Modules / _ssl.c modificado para ser usado com o OpenSSL 1.0, que é usado no Ubuntu 11.10. Por volta da linha 300, você encontrará o seguinte:

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

Mude isso para:

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

Isso desativa o suporte SSL_v2, que aparentemente desapareceu no OpenSSL1.0.

O Python 2.4 (sim, ainda tenho alguns projetos antigos que precisam do 2.4) precisa desse patch para o 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 precisa ser compilado com:

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

Respostas:

22

Existem mais alguns. Normalmente, o configure deve lembrá-lo se algo estiver faltando, e alguns deles são opcionais. Aqui está a minha lista:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
fonte
1
Obrigado, atualizado. O Configure lembra você, mas ele passa rapidamente e, às vezes, não é óbvio qual pacote instalar.
Lennart Regebro
Aceito como o único realmente respondendo. :) Vou tentar lembrar de adicionar a esta pergunta da próxima vez que precisar instalar um Ubuntu. :)
Lennart Regebro
1
Para o Ubuntu 12.04, você deve alterar libreadline5-devparalibreadline-dev
Ehtesh Choudhury 3/14
3
Mais recentemente, libbz2-dev e liblzma-dev também devem ser adicionados.
Apalala 20/05
2
16.10 foi substituído libreadline5-devporlibreadline-gplv2-dev
jmunsch
15

Você deve poder instalar todas as dependências de compilação para Python com a build-depopção no 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
fonte
1
Isso é interessante. Mas ele instala muitas coisas que claramente não são estritamente necessárias (libsgmls-perl !?), enquanto não instala nem libz-dev nem libreadline-dev (veja acima).
Lennart Regebro
Isso é muito útil quando você apt-get source python.
Stefano Palazzo
1
Para mim, isso também omite o openssl, o que significa que, depois de criar o python, não consigo instalar o setuptools porque o instalador faz o download por https.
Jonathan Hartley
isto é o que os documentos oficiais parecem recomendar também: docs.python.org/devguide/setup.html
hwjp
1
Para maior precisão, você pode usar o comando sudo apt-get build-dep python3.x(substitua 3 e x com a sua versão preferida, conforme necessário - embora, por vezes, como no meu caso 3.6 ainda não estava disponível, então eu usei 3,5 vez)
JxAxMxIxN
2

se você deseja usar o SDK do Google App Engine:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

fabjoa
fonte
Você não precisa do PIL para compilar o Python. :)
Lennart Regebro
1

Para executar certos tipos de testes, você precisará python-profiler

claytron
fonte