แพ็คเกจ / ไลบรารีใดที่ฉันควรติดตั้งก่อนที่จะรวบรวม Python จากแหล่งที่มา?


44

นาน ๆ ครั้งฉันจำเป็นต้องติดตั้ง 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 ไม่มีแพ็คเกจสำหรับฐานข้อมูล Berkeley v1.8.5 และ (สำหรับเหตุผลที่ชัดเจน) ฮาร์ดแวร์ระบบเสียง Sun ดังนั้นbsddb185และsunaudiodevโมดูลจะยังไม่ถูกสร้างบน Ubuntu แต่โมดูลอื่น ๆ ทั้งหมดถูกสร้างขึ้นพร้อมกับแพ็คเกจที่ติดตั้งไว้ด้านบน

UPDATE

ที่มีอยู่ในอูบุนตู 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 และใหม่กว่าเพื่อจัดการเค้าโครงแบบ multi-arch ใหม่:

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

สำหรับงูหลาม 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    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

คำตอบ:


22

มีอีกไม่กี่อย่าง โดยปกติการกำหนดค่าควรเตือนคุณถ้ามีอะไรจะหายไปและไม่กี่ของพวกเขาเป็นตัวเลือก นี่คือรายการของฉัน:

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

1
ขอขอบคุณอัปเดต การกำหนดค่าจะเตือนคุณ แต่เพียงแค่เปิดใช้งานและบางครั้งก็ไม่ชัดเจนว่าจะติดตั้งแพคเกจใด
Lennart Regebro

ยอมรับว่าเป็นคำตอบเดียวเท่านั้นที่จริง :) ฉันจะพยายามอย่าลืมเพิ่มคำถามนี้ในครั้งต่อไปที่ฉันต้องติดตั้ง Ubuntu :)
Lennart Regebro

1
สำหรับ Ubuntu 12.04 คุณจะต้องเปลี่ยนlibreadline5-devเป็นlibreadline-dev
Ehtesh Choudhury

3
อีกไม่นานควรเพิ่ม libbz2-dev และ liblzma-dev
Apalala

2
16.10 ได้แทนที่libreadline5-devด้วยlibreadline-gplv2-dev
jmunsch

15

คุณควรจะสามารถติดตั้ง build พึ่งพาทั้งหมดสำหรับ Python ด้วยbuild-depตัวเลือกใน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
นั่นดูน่าสนใจ. แต่มันติดตั้งโหลดสิ่งต่าง ๆ ที่เห็นได้ชัดว่าไม่จำเป็นอย่างเคร่งครัด (libsgmls-perl !?) ในขณะที่มันไม่ได้ติดตั้ง libz-dev หรือ libreadline-dev (ดูด้านบน)
Lennart Regebro

นี้มีประโยชน์มาก apt-get source pythonแต่เมื่อคุณ
Stefano Palazzo

1
สำหรับฉันนี่ยังละเว้น openssl ซึ่งหมายความว่าหลังจากฉันสร้าง python ฉันไม่สามารถติดตั้ง setuptools ได้เนื่องจากตัวติดตั้งดาวน์โหลดผ่าน https
Jonathan Hartley

นี่คือสิ่งที่เอกสารทางการดูเหมือนจะแนะนำด้วยเช่นกัน: docs.python.org/devguide/setup.html
hwjp

1
เพื่อความแม่นยำมากขึ้นคุณสามารถใช้คำสั่งsudo apt-get build-dep python3.x(แทนที่ 3 และ x ด้วยเวอร์ชันที่คุณต้องการตามความจำเป็น - แม้ว่าบางครั้งในกรณีของฉัน 3.6 ยังไม่พร้อมใช้งานดังนั้นฉันจึงใช้ 3.5 แทน)
JxAxMxIxN

2

หากคุณต้องการใช้ Google App Engine SDK:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)


คุณไม่จำเป็นต้องใช้ PIL เพื่อรวบรวม Python :)
Lennart Regebro

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.