Apa paket / pustaka yang harus saya instal sebelum mengkompilasi Python dari sumber?

44

Sesekali saya perlu menginstal Ubuntu baru (saya menggunakannya baik untuk desktop dan server) dan saya selalu lupa beberapa perpustakaan yang harus saya instal sebelum kompilasi, artinya saya harus mengkompilasi ulang, dan itu semakin menjengkelkan.

Jadi sekarang saya ingin membuat daftar lengkap dari semua paket perpustakaan untuk diinstal sebelum mengkompilasi Python (dan lebih disukai bagaimana opsional mereka).

Ini adalah daftar yang saya susun dengan bantuan di bawah ini dan dengan menggali setup.py. Ini lengkap untuk Ubuntu 10.04 dan 11.04 setidaknya:

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

Untuk Python 3.2 dan yang lebih baru:

liblzma-dev

Lebih opsional:

tk-dev
libdb-dev

Ubuntu tidak memiliki paket untuk v1.8.5 dari database Berkeley, juga (untuk alasan yang jelas) perangkat keras audio Sun, sehingga modul bsddb185dan sunaudiodevmasih tidak akan dibangun di Ubuntu, tetapi semua modul lainnya dibangun dengan paket-paket di atas diinstal.

MEMPERBARUI

Ada di Ubuntu 14,04 bahkan lebih banyak tambalan yang diperlukan untuk Python 2.6, dan 2.7 dll. Saya akan merekomendasikan untuk checkout checkout pyenv . Ini berisi skrip python-build(terletak di plugins/python-build/bin). Dengannya Anda dapat menginstal versi Python sewenang-wenang seperti ini:

$ ./python-build 2.7.8 /opt/python27

Di mana 2.7.8 adalah versi dan / opt / python27 adalah path yang akan diinstal. Pyenv akan mengunduh versi Python, menerapkan tambalan yang diperlukan dan configure; make; make installuntuk Anda.

AKHIR PEMBARUAN

Python 2.5 dan Python 2.6 juga perlu memiliki LDFLAGS ditetapkan pada Ubuntu 11.04 dan yang lebih baru, untuk menangani tata letak multi-lengkungan yang baru:

export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"

Untuk Python 2.6, 2.7 dan 3.0 Anda juga perlu mengaktifkan SSL secara eksplisit setelah menjalankan ./configureskrip dan sebelum menjalankan make. Di Modules/Setupsana ada baris seperti ini:

#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto

Batalkan komentar pada baris ini dan ubah variabel SSL ke /usr:

SSL=/usr
_ssl _ssl.c \
       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
       -L$(SSL)/lib -lssl -lcrypto

Python 2.6 dan 3.0 juga membutuhkan Modul / _ssl.c yang dimodifikasi untuk digunakan dengan OpenSSL 1.0, yang digunakan di Ubuntu 11.10. Di sekitar garis 300 Anda akan menemukan ini:

    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 */

Ubah itu menjadi:

    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 */

Ini menonaktifkan dukungan SSL_v2, yang tampaknya hilang di OpenSSL1.0.

Python 2.4 (ya, saya masih memiliki beberapa proyek lama yang perlu 2.4) membutuhkan tambalan ini untuk 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

Dan itu perlu dikompilasi dengan:

env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu"  ./configure --prefix=/opt/python2.4
Lennart Regebro
sumber

Jawaban:

22

Ada beberapa lagi. Biasanya, konfigurasi harus mengingatkan Anda jika ada yang hilang, dan beberapa di antaranya bersifat opsional. Inilah daftar saya:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
sumber
1
Terima kasih, diperbarui. Konfigurasi memang mengingatkan Anda, tetapi hanya disapu, dan terkadang tidak jelas paket apa yang harus dipasang.
Lennart Regebro
Diterima sebagai satu-satunya yang benar-benar menjawab. :) Saya akan mencoba mengingat untuk menambahkan pertanyaan ini pada saat saya perlu menginstal Ubuntu. :)
Lennart Regebro
1
Untuk Ubuntu 12.04, Anda ingin mengubah libreadline5-devkelibreadline-dev
Ehtesh Choudhury
3
Baru-baru ini, libbz2-dev dan liblzma-dev juga harus ditambahkan.
Apalala
2
16.10 telah diganti libreadline5-devdenganlibreadline-gplv2-dev
jmunsch
15

Anda harus dapat menginstal semua dependance build untuk Python dengan build-depopsi di 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.
Marco Ceppi
sumber
1
Itu menarik. Tetapi ia menginstal banyak hal yang jelas tidak benar-benar dibutuhkan (libsgmls-perl !?), sementara itu tidak menginstal libz-dev atau libreadline-dev (lihat di atas).
Lennart Regebro
Ini sangat berguna saat Anda apt-get source python.
Stefano Palazzo
1
Bagi saya, ini juga menghilangkan openssl, yang berarti bahwa setelah saya membuat python, saya tidak dapat menginstal setuptools karena penginstalnya mengunduh melalui https.
Jonathan Hartley
inilah yang tampaknya direkomendasikan oleh dokumen resmi juga: docs.python.org/devguide/setup.html
hwjp
1
Untuk presisi yang lebih besar Anda dapat menggunakan perintah sudo apt-get build-dep python3.x(ganti 3 dan x dengan versi pilihan Anda sesuai kebutuhan - meskipun kadang-kadang dalam kasus saya 3,6 belum tersedia sehingga saya menggunakan 3,5 sebagai gantinya)
JxAxMxIxN
2

jika Anda ingin menggunakan Google App Engine SDK:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

fabjoa
sumber
Anda tidak perlu PIL untuk mengkompilasi Python. :)
Lennart Regebro
1

Untuk menjalankan jenis tes tertentu, Anda perlu python-profiler

claytron
sumber