Время от времени мне нужно устанавливать новую Ubuntu (я использовал ее как для настольных компьютеров, так и для серверов), и я всегда забываю пару библиотек, которые я должен был установить перед компиляцией, то есть мне приходится перекомпилировать, и это раздражает.
Итак, теперь я хочу составить полный список всех библиотечных пакетов для установки перед компиляцией Python (и желательно, насколько они необязательны).
Это список, который я составил с помощью справки ниже и копаясь в setup.py. Это полно для Ubuntu 10.04 и 11.04 как минимум:
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
Для Python 3.2 и более поздних версий:
liblzma-dev
Более необязательно:
tk-dev
libdb-dev
Ubuntu не имеет пакетов для v1.8.5 базы данных Berkeley, ни (по понятным причинам) аудио аппаратных средств ВС, так bsddb185и sunaudiodevмодули все еще не будет построен на Ubuntu, но все остальные модули построены с указанными выше установленных пакетов.
ОБНОВИТЬ
В Ubuntu 14.04 есть еще больше патчей, необходимых для Python 2.6, 2.7 и т. Д. Я бы порекомендовал вместо этого проверить pyenv . Содержит скрипт python-build(находится в plugins/python-build/bin). С его помощью вы можете установить произвольные версии Python, как это:
$ ./python-build 2.7.8 /opt/python27
Где 2.7.8 - версия, а / opt / python27 - путь, по которому она будет установлена. Pyenv скачает версию Python, установит необходимые патчи и configure; make; make installдля вас.
КОНЕЦ ОБНОВЛЕНИЯ
Python 2.5 и Python 2.6 также должны иметь LDFLAGS, установленный в Ubuntu 11.04 и более поздних версиях, для обработки нового многоархивового макета:
export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
Для Python 2.6, 2.7 и 3.0 вам также необходимо явно включить SSL после запуска ./configureсценария и перед запуском make. В Modules/Setupесть линии , как это:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
Раскомментируйте эти строки и измените переменную SSL на /usr:
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Python 2.6 и 3.0 также нуждается в модификации Modules / _ssl.c для использования с OpenSSL 1.0, который используется в Ubuntu 11.10. На линии 300 вы найдете это:
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 */
Измените это на:
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 */
Это отключает поддержку SSL_v2, которая, по-видимому, отсутствует в OpenSSL1.0.
Python 2.4 (да, у меня все еще есть несколько старых проектов, которым требуется 2.4), нужен этот патч для 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
И это должно быть скомпилировано с:
env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu" ./configure --prefix=/opt/python2.4