Які пакунки / бібліотеки я повинен встановити, перш ніж компілювати 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 немає пакетів для версії 1.8.5 бази даних Берклі, а також (з очевидних причин) аудіо апаратура Sun, тому модулі 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

Є ще кілька. Зазвичай, конфігурація повинна нагадувати вам , якщо що - то НЕ вистачає, а деякі з них є необов'язковими. Ось мій список:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev

1
Дякуємо, оновлено. Налаштування нагадує вам, але воно просто замикається, і іноді не очевидно, який пакет встановити.
Леннарт Регебро

Приймається як єдиний, хто насправді відповідає. :) Я спробую пам'ятати, щоб додати це питання наступного разу, коли мені потрібно встановити 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

якщо ви хочете використовувати SDK Google App Engine SDK:

  • opensll
  • libssl-dev build-істотний

libsqlite3-dev zlib1g zlib1g-dev

ПІЛ 1.1.7

:)


Для компіляції Python вам не потрібен PIL. :)
Леннарт Регебро

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.