Thỉnh thoảng tôi cần cài đặt Ubuntu mới (tôi đã sử dụng cả cho máy tính để bàn và máy chủ) và tôi luôn quên một vài thư viện mà tôi nên cài đặt trước khi biên dịch, nghĩa là tôi phải biên dịch lại và điều đó thật khó chịu.
Vì vậy, bây giờ tôi muốn tạo một danh sách đầy đủ tất cả các gói thư viện để cài đặt trước khi biên dịch Python (và tốt nhất là chúng là tùy chọn như thế nào).
Đây là danh sách tôi biên soạn với sự giúp đỡ dưới đây và bằng cách đào sâu vào setup.py
. Nó đã hoàn thành cho Ubuntu 10.04 và 11.04 ít nhất:
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
Đối với Python 3.2 trở lên:
liblzma-dev
Tùy chọn khác:
tk-dev
libdb-dev
Ubuntu không có gói cho v1.8.5 của cơ sở dữ liệu Berkeley, cũng như (vì lý do rõ ràng) phần cứng âm thanh Mặt trời, vì vậy bsddb185
và sunaudiodev
các mô-đun sẽ vẫn không được xây dựng trên Ubuntu, nhưng tất cả các mô-đun khác được xây dựng với các gói trên được cài đặt.
CẬP NHẬT
Có trong Ubuntu 14.04 các bản vá thậm chí còn cần thiết hơn cho Python 2.6 và 2.7, v.v. Tôi muốn giới thiệu thay vì kiểm tra pyenv . Nó chứa một tập lệnh python-build
(nằm trong plugins/python-build/bin
). Với nó, bạn có thể cài đặt các phiên bản Python tùy ý như thế này:
$ ./python-build 2.7.8 /opt/python27
Trong đó 2.7.8 là phiên bản và / opt / python27 là đường dẫn nó sẽ được cài đặt. Pyenv sẽ tải xuống phiên bản Python, áp dụng các bản vá cần thiết và configure; make; make install
cho bạn.
CẬP NHẬT KẾT THÚC
Python 2.5 và Python 2.6 cũng cần phải có LDFLAGS được đặt trên Ubuntu 11.04 trở lên, để xử lý bố cục đa vòm mới:
export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
Đối với Python 2.6, 2.7 và 3.0, bạn cũng cần bật SSL rõ ràng sau khi chạy ./configure
tập lệnh và trước khi chạy make
. Trong Modules/Setup
đó có những dòng như thế này:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
Bỏ ghi chú những dòng này và thay đổi biến SSL thành /usr
:
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Python 2.6 và 3.0 cũng cần Modules / _ssl.c được sửa đổi để được sử dụng với OpenSSL 1.0, được sử dụng trong Ubuntu 11.10. Ở khoảng 300 dòng bạn sẽ tìm thấy điều này:
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 */
Thay đổi nó thành:
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 */
Điều này vô hiệu hóa hỗ trợ SSL_v2, dường như đã biến mất trong OpenSSL1.0.
Python 2.4 (vâng, tôi vẫn còn một số dự án cũ cần 2.4) cần bản vá này để 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
Và nó cần được biên dịch với:
env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu" ./configure --prefix=/opt/python2.4