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 bsddb185
i sunaudiodev
moduł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 install
dla 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 ./configure
skryptu i przed uruchomieniem make
. W Modules/Setup
istnieją 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