Какие пакеты / библиотеки я должен установить перед компиляцией Python из исходного кода?

44

Время от времени мне нужно устанавливать новую 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
Леннарт Регебро
источник

Ответы:

22

Есть еще несколько. Обычно, configure должен напоминать вам, если чего-то не хватает, и некоторые из них являются необязательными. Вот мой список:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Стефано Палаццо
источник
1
Спасибо, обновлено. Configure напоминает вам, но он просто скачет мимо, и иногда неясно, какой пакет установить.
Леннарт Регебро
Принимается как единственный, действительно отвечающий. :) Я постараюсь не забыть добавить к этому вопросу в следующий раз, когда мне нужно будет установить Ubuntu. :)
Леннарт Регебро
1
Для Ubuntu 12.04 вы захотите перейти libreadline5-devнаlibreadline-dev
Ehtesh Choudhury
3
Позже также должны быть добавлены libbz2-dev и liblzma-dev.
Апалала
2
16.10 заменил libreadline5-devнаlibreadline-gplv2-dev
jmunsch
15

Вы должны иметь возможность установить все зависимости сборки для Python с build-depопцией в 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.
Марко Чеппи
источник
1
Это интересно. Но он устанавливает множество вещей, которые явно не являются строго необходимыми (libsgmls-perl !?), тогда как он не устанавливает ни libz-dev, ни libreadline-dev (см. Выше).
Леннарт Регебро
Это очень полезно, хотя, когда вы apt-get source python.
Стефано Палаццо
1
Для меня это также опускает openssl, что означает, что после сборки Python я не могу установить setuptools, потому что его установщик загружается через https.
Джонатан Хартли
это то, что официальные документы рекомендуют тоже: docs.python.org/devguide/setup.html
hwjp
1
Для большей точности вы можете использовать команду sudo apt-get build-dep python3.x(при необходимости замените 3 и x предпочитаемой версией - хотя иногда, поскольку в моем случае 3.6 еще не был доступен, поэтому вместо этого я использовал 3.5)
JxAxMxIxN
2

если вы хотите использовать Google App Engine SDK:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

fabjoa
источник
Вам не нужен PIL для компиляции Python. :)
Леннарт Регебро
1

Для запуска определенных типов тестов вам понадобится python-profiler

claytron
источник