นาน ๆ ครั้งฉันจำเป็นต้องติดตั้ง 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