Час від часу мені потрібно встановити нову 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