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

42

Время от времени мне нужно установить новый 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, а также (по очевидным причинам) аппаратного обеспечения Sun, поэтому модули bsddb185 и sunaudiodev по-прежнему не будут созданы на Ubuntu, но все остальные модули с установленными выше пакетами.

UPDATE

В 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 для вас.

END UPDATE

Для 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 также требуются модули / _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
    
задан Lennart Regebro 26.10.2014 в 12:11
источник

4 ответа

20

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

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

Обратите внимание, что нет необходимости устанавливать библиотеки разработки Tk. Tk предоставляется через репозитории (для python 2.x и python 3)

    
ответ дан Stefano Palazzo 29.06.2015 в 19:25
источник
14

Вы должны иметь возможность устанавливать все зависимости для сборки для 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.
    
ответ дан Marco Ceppi 14.01.2011 в 19:22
2
___ qstnhdr ___ Каковы пакеты / библиотеки, которые я должен установить перед компиляцией Python из источника? ______ qstntxt ___

Время от времени мне нужно установить новый Ubuntu (я использовал его как для рабочего стола, так и для серверов), и я всегда забываю о нескольких библиотеках, которые я должен был установить перед компиляцией, то есть мне нужно перекомпилировать, и это раздражает.

Итак, теперь я хочу составить полный список всех пакетов библиотек для установки перед компиляцией Python (и, желательно, насколько это возможно).

Это список, который я скомпилировал с помощью справки ниже и копаем в %co_de% . Он подходит для Ubuntu 10.04 и 11.04:

%pr_e%

Для Python 3.2 и более поздних версий:

%pr_e%

Дополнительно:

%pr_e%

Ubuntu не имеет пакетов для v1.8.5 базы данных Berkeley, а также (по очевидным причинам) аппаратного обеспечения Sun, поэтому модули %co_de% и %co_de% по-прежнему не будут созданы на Ubuntu, но все остальные модули с установленными выше пакетами.

UPDATE

В Ubuntu 14.04 есть еще больше патчей, необходимых для Python 2.6 и 2.7 и т. д. Я бы рекомендовал вместо этого проверить pyenv . Он содержит скрипт %co_de% (находится в %co_de% ). С его помощью вы можете установить произвольные версии Python следующим образом:

%pr_e%

Если версия 2.7.8 и версия / opt / python27 - это путь, который будет установлен. Pyenv загрузит версию Python, применит необходимые исправления и %co_de% для вас.

END UPDATE

Для Python 2.5 и Python 2.6 также необходимо установить LDFLAGS на Ubuntu 11.04 и более поздних версиях, чтобы обрабатывать новый многоадресный макет:

%pr_e%

Для Python 2.6, 2.7 и 3.0 вам также необходимо явно включить SSL после запуска скрипта %co_de% и перед запуском %co_de% . В %co_de% есть такие строки:

%pr_e%

Раскомментируйте эти строки и измените переменную SSL на %co_de% :

%pr_e%

Для Python 2.6 и 3.0 также требуются модули / _ssl.c, которые будут использоваться с OpenSSL 1.0, который используется в Ubuntu 11.10. Примерно через 300 вы найдете следующее:

%pr_e%

Измените это на:

%pr_e%

Это отключает поддержку SSL_v2, которая, по-видимому, ушла в OpenSSL1.0.

Python 2.4 (да, у меня все еще есть старые проекты, для которых требуется 2.4) этот патч требуется для setup.py:

%pr_e%

И его нужно скомпилировать с помощью:

%pr_e%     
______ answer21551 ___

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

%pr_e%

Обратите внимание, что нет необходимости устанавливать библиотеки разработки Tk. Tk предоставляется через репозитории (для python 2.x и python 3)

    
______ answer21550 ___

Вы должны иметь возможность устанавливать все зависимости для сборки для Python с опцией %co_de% в apt-get

%co_de%

%pr_e%     
______ answer2325 ___

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

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

    
______ answer21896 ___

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

    
___
ответ дан fabjoa 25.01.2011 в 23:17
1

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

    
ответ дан claytron 17.01.2011 в 00:33