Các gói / thư viện tôi nên cài đặt trước khi biên dịch Python từ nguồn là gì?


44

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 bsddb185sunaudiodevcá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 installcho 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 ./configuretậ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

Câu trả lời:


22

Có một vài điều nữa. Thông thường, cấu hình sẽ nhắc nhở bạn nếu thiếu bất cứ thứ gì, và một vài trong số chúng tùy chọn. Đây là danh sách của tôi:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev

1
Cảm ơn, cập nhật. Cấu hình sẽ nhắc nhở bạn, nhưng nó chỉ xuất hiện và đôi khi không rõ cài đặt gói nào.
Lennart Regebro

Được chấp nhận là người duy nhất thực sự trả lời. :) Tôi sẽ cố nhớ để thêm vào câu hỏi này vào lần tới khi tôi cần cài đặt Ubuntu. :)
Lennart Regebro

1
Đối với Ubuntu 12.04, bạn sẽ muốn đổi libreadline5-devthànhlibreadline-dev
Ehtesh Choudhury

3
Gần đây, libbz2-dev và liblzma-dev cũng nên được thêm vào.
Apalala

2
16.10 đã thay thế libreadline5-devbằnglibreadline-gplv2-dev
jmunsch

15

Bạn sẽ có thể cài đặt tất cả các phụ thuộc xây dựng cho Python với build-deptùy chọn trong 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.

1
Nó thật thú vị. Nhưng nó cài đặt vô số thứ rõ ràng là không cần thiết lắm (libsgmls-perl!?), Trong khi nó không cài đặt cả libz-dev hay libreadline-dev (xem ở trên).
Lennart Regebro

Điều này rất hữu ích mặc dù khi bạn apt-get source python.
Stefano Palazzo

1
Đối với tôi, điều này cũng bỏ qua openssl, điều đó có nghĩa là sau khi tôi xây dựng python, tôi không thể cài đặt setuptools vì trình cài đặt của nó tải xuống qua https.
Jonathan Hartley

đây là những gì các tài liệu chính thức dường như đề nghị quá: docs.python.org/devguide/setup.html
hwjp

1
Để có độ chính xác cao hơn, bạn có thể sử dụng lệnh sudo apt-get build-dep python3.x(thay thế 3 và x bằng phiên bản ưa thích của mình nếu cần - mặc dù đôi khi như trong trường hợp 3.6 của tôi chưa có sẵn nên tôi đã sử dụng 3.5 thay thế)
JxAxMxIxN

2

nếu bạn muốn sử dụng Google App Engine SDK:

  • mở
  • libssl-dev xây dựng-thiết yếu

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)


Bạn không cần PIL để biên dịch Python. :)
Lennart Regebro

1

Để chạy các loại thử nghiệm nhất định, bạn sẽ cần python-profiler

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.