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

41

De vez em quando eu preciso instalar um novo Ubuntu (eu usei tanto para desktop quanto para servidores) e sempre esqueço algumas bibliotecas que eu deveria ter instalado antes de compilar, 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 biblioteca para instalar antes de compilar o Python (e, de preferência, como eles são opcionais).

Esta é a lista que eu compilei com a ajuda abaixo e pesquisando em 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 o Python 3.2 e posterior:

liblzma-dev

Mais opcional:

tk-dev
libdb-dev

O Ubuntu não tem 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 bsddb185 e sunaudiodev ainda não serão construídos no Ubuntu, mas todos os outros módulos são construído com os pacotes acima instalados.

UPDATE

Existem no Ubuntu 14.04 ainda mais patches necessários para o Python 2.6, e 2.7 etc. Eu recomendaria fazer o checkout 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 que será instalado. O Pyenv fará o download da versão do Python, aplicará os patches necessários e configure; make; make install para você.

END UPDATE

O Python 2.5 e o Python 2.6 também precisam ter o LDFLAGS configurado 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 o Python 2.6, 2.7 e 3.0, você também precisa ativar o SSL explicitamente após executar o script ./configure e antes de executar make . Em Modules/Setup existem linhas como esta:

#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 o 3.0 também precisam de módulos / _ssl.c modificados para serem usados com o OpenSSL 1.0, que é usado no Ubuntu 11.10. Em torno da linha 300 você encontrará isto:

    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 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, eu ainda tenho alguns projetos antigos que precisam de 2.4) precisa deste patch 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

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
    
por Lennart Regebro 26.10.2014 / 12:11

4 respostas

19

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

build-essential
libncursesw5-dev
libreadline5-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev tk-dev
libbz2-dev

Observe que não há necessidade de instalar bibliotecas de desenvolvimento Tk. Tk é fornecido através dos repositórios (para python 2.xe python 3)

    
por Stefano Palazzo 29.06.2015 / 19:25
14

Você deve ser capaz de instalar todas as dependências de compilação do Python com a opção build-dep em 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.
    
por Marco Ceppi 14.01.2011 / 19:22
2

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

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

    
por fabjoa 25.01.2011 / 23:17
1

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

    
por claytron 17.01.2011 / 00:33