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