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 bsddb185
e sunaudiodev
ainda 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 install
para 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 ./configure
script e antes de executar make
. Em Modules/Setup
há 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