Jakie pakiety / biblioteki powinienem zainstalować przed skompilowaniem Pythona ze źródła?

44

Raz na jakiś czas muszę zainstalować nowe Ubuntu (używałem go zarówno na komputery stacjonarne, jak i serwery) i zawsze zapominam o kilku bibliotekach, które powinienem zainstalować przed kompilacją, co oznacza, że ​​muszę ponownie skompilować, a to robi się denerwujące.

Więc teraz chcę stworzyć pełną listę wszystkich pakietów bibliotek do zainstalowania przed skompilowaniem Pythona (i najlepiej, jeśli są one opcjonalne).

To jest lista, którą skompilowałem poniżej, korzystając z pomocy setup.py. Jest kompletny dla Ubuntu 10.04 i 11.04 co najmniej:

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

W przypadku Python 3.2 i nowszych:

liblzma-dev

Więcej opcjonalnie:

tk-dev
libdb-dev

Ubuntu nie ma pakietów dla v1.8.5 bazy danych Berkeley, ani (z oczywistych powodów) sprzęt audio, Słońce, więc bsddb185i sunaudiodevmoduły nie będą nadal być zbudowany na Ubuntu, ale wszystkie inne moduły są zbudowane z powyższych pakietów zainstalowanych.

AKTUALIZACJA

W Ubuntu 14.04 jest jeszcze więcej łatek potrzebnych do Pythona 2.6 i 2.7 itd. Polecam zamiast tego sprawdzić pyenv . Zawiera skrypt python-build(znajduje się w plugins/python-build/bin). Dzięki niemu możesz zainstalować dowolne wersje Pythona takie jak to:

$ ./python-build 2.7.8 /opt/python27

Gdzie jest wersja 2.7.8, a / opt / python27 to ścieżka, na której zostanie zainstalowana. Pyenv pobierze wersję Pythona, zastosuje niezbędne poprawki i configure; make; make installdla ciebie.

ZAKOŃCZ AKTUALIZACJĘ

Python 2.5 i Python 2.6 również muszą mieć ustawione LDFLAGS w systemie Ubuntu 11.04 i nowszych, aby obsłużyć nowy układ wielu łuków:

export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"

W przypadku języka Python 2.6, 2.7 i 3.0 należy również jawnie włączyć protokół SSL po uruchomieniu ./configureskryptu i przed uruchomieniem make. W Modules/Setupistnieją linie takie jak to:

#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto

Usuń komentarz z tych linii i zmień zmienną SSL na /usr:

SSL=/usr
_ssl _ssl.c \
       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
       -L$(SSL)/lib -lssl -lcrypto

Python 2.6 i 3.0 również wymagają modyfikacji Modułów / _ssl.c, aby mogły być używane z OpenSSL 1.0, który jest używany w Ubuntu 11.10. Około linii 300 znajdziesz to:

    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 */

Zmień to na:

    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 */

To wyłącza obsługę SSL_v2, która najwyraźniej zniknęła w OpenSSL1.0.

Python 2.4 (tak, wciąż mam kilka starych projektów, które wymagają 2.4) potrzebuje tej poprawki do pliku 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

I należy go skompilować z:

env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu"  ./configure --prefix=/opt/python2.4
Lennart Regebro
źródło

Odpowiedzi:

22

Jest jeszcze kilka innych. Zwykle konfiguracja powinna przypominać, jeśli czegoś brakuje, a niektóre z nich opcjonalne. Oto moja lista:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
źródło
1
Dzięki, zaktualizowano. Konfiguracja przypomina, ale po prostu mija, a czasem nie jest oczywiste, jaki pakiet zainstalować.
Lennart Regebro
Zaakceptowany jako jedyny faktycznie odpowiadający. :) Postaram się pamiętać, aby dodać do tego pytania następnym razem, gdy będę musiał zainstalować Ubuntu. :)
Lennart Regebro 16.01.11
1
W przypadku Ubuntu 12.04, chcesz zmienić libreadline5-devnalibreadline-dev
Ehtesh Choudhury
3
Niedawno należy również dodać libbz2-dev i liblzma-dev.
Apalala
2
16.10 zastąpiony libreadline5-devprzezlibreadline-gplv2-dev
jmunsch
15

Powinieneś być w stanie zainstalować wszystkie zależności kompilacji dla Pythona z build-depopcją w 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
źródło
1
To interesujące. Ale instaluje mnóstwo rzeczy, które wyraźnie nie są ściśle potrzebne (libsgmls-perl !?), podczas gdy nie instaluje ani libz-dev, ani libreadline-dev (patrz wyżej).
Lennart Regebro
Jest to bardzo przydatne, gdy Ty apt-get source python.
Stefano Palazzo
1
Dla mnie pomija to również openssl, co oznacza, że ​​po zbudowaniu Pythona nie mogę zainstalować setuptools, ponieważ jego instalator pobiera przez https.
Jonathan Hartley
wydaje się, że oficjalne dokumenty też to zalecają: docs.python.org/devguide/setup.html
hwjp
1
Dla większej precyzji możesz użyć polecenia sudo apt-get build-dep python3.x(w razie potrzeby zamień 3 i x na preferowaną wersję - choć czasami tak jak w moim przypadku 3.6 nie było jeszcze dostępne, więc zamiast tego użyłem 3.5)
JxAxMxIxN
2

jeśli chcesz użyć Google App Engine SDK:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

fabjoa
źródło
Nie potrzebujesz PIL do kompilacji Pythona. :)
Lennart Regebro 25.01.11
1

Do uruchomienia niektórych rodzajów testów będziesz potrzebować python-profiler

Claytron
źródło