Gần đây tôi đã backported Python 2.7 thành Debian squeeze. Vì Ubuntu 10.10 mới hơn Debian squeeze, nếu bạn có thể làm điều đó trên squeeze, bạn chắc chắn có thể làm điều đó trên Ubuntu. Tôi không có quyền truy cập vào hệ thống Ubuntu 10.10. Nếu tôi thiết lập một, tôi sẽ kiểm tra nó, và cập nhật câu trả lời này. Vì vậy, ở đây thay vào đó là một bản phác thảo ngắn gọn về những gì tôi đã làm trên Debian.
Đầu tiên, một nhận xét chung và rõ ràng, nhưng có thể dễ dàng bị bỏ qua. Người ta không nên lấy phụ thuộc xây dựng được liệt kê của một gói Debian quá nghiêm túc. Chúng có thể đặc biệt hơn cần thiết. Ví dụ, phần mềm như Python, được thiết kế để di động và chạy trên một loạt các hệ thống, khó có khả năng xây dựng phụ thuộc vào các phiên bản phần mềm rất cụ thể. Các phụ thuộc thời gian chạy có thể được điều chỉnh là tốt, nhưng điều này nên được thực hiện cẩn thận hơn. Tuy nhiên, các phụ thuộc thời gian chạy chủ yếu được tạo động dựa trên phần mềm đã có trên hệ thống này, vì vậy thường thì đó không phải là vấn đề lớn.
apt-cache policy python2.7
python2.7:
Installed: 2.7.2-8
Candidate: 2.7.2-8
Version table:
2.7.2-12 0
50 http://debian.csail.mit.edu/debian/ unstable/main i386 Packages
2.7.2-8 0
50 http://debian.csail.mit.edu/debian/ testing/main i386 Packages
*** 2.7.2-8 0
100 /var/lib/dpkg/status
Lựa chọn phiên bản thử nghiệm chúng tôi nhận
apt-get source python2.7=2.7.2-8
Nhìn vào debian/control
, chúng ta thấy xây dựng các tuyến phụ thuộc như sau.
Xây dựng-phụ thuộc: debhelper (> = 5), quilt, autoconf, libreadline-dev, libtinfo-dev, libncursesw5-dev (> = 5.3), tk8.5-dev, zlib1g-dev, blt-dev (> = 2.4z), libssl-dev, libexpat1-dev, sharutils, libbz2-dev, libbluetooth-dev [linux-any], ngôn ngữ [! Armel! Avr32! Hppa! Ia64! Mipsel], libsqlite3-dev, libffi-dev (> = 3.0.5), mime-support, libgpm2 [linux-any], netbase, lsb-release, bzip2, libdb4.8-dev, gdb, python, help2man Build-Depends-Indep: python-sphinx Xây dựng -Cấu hình: tcl8.3-dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
Hầu hết điều này có thể dễ dàng thỏa mãn khi vắt. Với các tiện ích tiện dụng apt-show-versions
chúng tôi nhận được trên máy tính của tôi
apt-show-versions debhelper quilt autoconf libreadline-dev libtinfo-dev libncursesw5-dev tk8.5-dev zlib1g-dev blt-dev \
libssl-dev libexpat1-dev sharutils libbz2-dev libbluetooth-dev locales libsqlite3-dev \
libffi-dev mime-support libgpm2 netbase lsb-release bzip2 libdb4.8-dev gdb python help2man python-sphinx
autoconf/squeeze uptodate 2.67-2
blt-dev/squeeze uptodate 2.4z-4.2
bzip2/squeeze uptodate 1.0.5-6
debhelper/squeeze-backports uptodate 8.9.13~bpo60+1
gdb/squeeze uptodate 7.0.1-2+b1
help2man/squeeze uptodate 1.38.2
libbluetooth-dev/squeeze uptodate 4.66-3
libbz2-dev/squeeze uptodate 1.0.5-6
libdb4.8-dev/squeeze uptodate 4.8.30-2
libexpat1-dev/squeeze uptodate 2.0.1-7
libffi-dev/squeeze uptodate 3.0.9-3
libgpm2/squeeze uptodate 1.20.4-3.3
libncursesw5-dev/squeeze uptodate 5.7+20100313-5
libreadline-dev/squeeze uptodate 6.1-3
libsqlite3-dev/squeeze uptodate 3.7.3-1
libssl-dev/squeeze uptodate 0.9.8o-4squeeze5
libtinfo-dev not installed
locales/squeeze uptodate 2.11.2-10
lsb-release/squeeze uptodate 3.2-23.2squeeze1
mime-support/squeeze uptodate 3.48-1
netbase/squeeze uptodate 4.45
python/squeeze uptodate 2.6.6-3+squeeze6
python-sphinx/squeeze-backports uptodate 1.0.8+dfsg-2~bpo60+1
quilt/squeeze uptodate 0.48-7
sharutils/squeeze uptodate 1:4.9-1
tk8.5-dev/squeeze uptodate 8.5.8-1
zlib1g-dev/squeeze uptodate 1:1.2.3.4.dfsg-3
Chúng ta thấy rằng tất cả mọi thứ trừ libtinfo-dev
có sẵn trong bóp. Tôi có các phiên bản backport squeeze của debhelper
và python-sphinx
, nhưng cả hai phiên bản này đều có sẵn để gỡ lỗi debian trong các phiên bản thỏa mãn các yêu cầu xây dựng.
Quan sát cũng rằng tôi có gói libncurses5-dev cài đặt
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Cả hai gói tương ứng với nguồn gói curses 5.7+20100313-5
. Quan sát rằng libtinfo-dev
thực tế thay thế libncurses5-dev
.
apt-cache show libtinfo-dev
Package: libtinfo-dev
Source: ncurses
Version: 5.9-4
Installed-Size: 279
Maintainer: Craig Small <[email protected]>
Architecture: i386
Replaces: libncurses5-dev (<< 5.9-3)
Depends: libtinfo5 (= 5.9-4)
Người ta sẽ không ngờ python 2.7 phát triển trên phiên bản cụ thể của lời nguyền, và thực tế là không. Tuy nhiên, nếu bạn cố gắng xây dựng các gói mà không thỏa mãn sự phụ thuộc, bạn nhận được
debuild -uc -us
dpkg-checkbuilddeps: Unmet build dependencies: libtinfo-dev
dpkg-checkbuilddeps: Build conflicts: libncurses5-dev
debuild: fatal error at line 1289:
You do not appear to have all build dependencies properly met.
You can use mk-build-deps to generate a dummy package which
Depends on all the required packages, or you can install them
manually using dpkg or apt using the error messages just above
this message.
Vì vậy, cần chỉnh sửa debian/control
. Lưu ý rằng bạn cũng cần chỉnh sửa tệp tương tự debian/control.in
, nếu không, tệp control
sẽ được khôi phục không chính xác từ control.in
. Điều đơn giản nhất cần làm là xóa libncurses5-dev
khỏi đường dây Build-Conflicts
và libtinfo-dev
khỏi đường Build-Depends
và sau đó chạy lại debuild -uc -us
. Nếu bạn đang đi để đã cài đặt gói này cùng với Python 2.6 gói trên bóp Debian mặc định tiêu chuẩn, bạn cũng cần phải loại bỏ hai dòng
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Những dòng đang có vì 2,7 bao gồm các chức năng python-profiler
. Nếu 2.7 là con trăn mặc định, thì python-profiler
không còn cần thiết nữa. Tuy nhiên, nếu một người đang cài đặt 2.7 dưới dạng Python không mặc định, lý do đó không áp dụng và python-profiler
vẫn cần 2,6.
Điều này sẽ xây dựng thành công và dẫn đến danh sách các gói nhị phân sau đây.
ls -lah *.deb
-rw-r--r-- 1 faheem staff 289K Jan 12 02:33 idle-python2.7_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 1.1M Jan 12 02:34 libpython2.7_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 2.5M Jan 12 02:34 python2.7_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 12M Jan 12 02:34 python2.7-dbg_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 4.9M Jan 12 02:34 python2.7-dev_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 6.0M Jan 12 02:33 python2.7-doc_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 692K Jan 12 02:33 python2.7-examples_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 1.7M Jan 12 02:34 python2.7-minimal_2.7.2-8_i386.deb
Cuối cùng, người ta có thể cài đặt các gói nhị phân với
dpkg -i python2.7-minimal_2.7.2-8_i386.deb python2.7_2.7.2-8_i386.deb python2.7-dev_2.7.2-8_i386.deb libpython2.7_2.7.2-8_i386.deb
Đôi khi dpkg
có thể là một chút khó khăn về đáp ứng phụ thuộc khi tất cả chúng đều được cài đặt cùng một lúc, vì vậy bạn có thể phải chạy apt-get -f install
sau đó nếu bạn nhận được lỗi phụ thuộc, hoặc cách khác cài đặt các gói trong các nhóm nhỏ hơn.
cảm ơn. Tôi có phần đó, nhưng câu hỏi của tôi là nhiều hơn về cách chuyển đổi qua lại giữa hai phiên bản. Với ruby tôi sử dụng RVM để quản lý nhiều phiên bản Ruby. Có tương đương với Python hay không cần thiết? – jimdolan
Nhưng sử dụng "make altinstall" thay vì "make install". "make install" sẽ định cấu hình 2.7 là phiên bản mặc định và bạn không muốn điều đó. "làm cho altinstall" sẽ để lại hệ thống Python một mình và bạn sẽ chỉ cần sử dụng "python2.7" để gọi nó. – casevh
Vâng, làm cho altinstall là con đường để đi. – codeape