Я новичок в Python и работаю на Linux-машине (Ubuntu 10.10). Он запускает python 2.6, но я бы хотел запустить 2.7, поскольку у него есть функции, которые я хочу использовать. Мне было настоятельно предложено не устанавливать 2.7 и установить это как мой python по умолчанию.
Мой вопрос в том, как я могу установить 2.7 и запустить его рядом с 2.6?
Я сделал это с pythonbrew на моей машине Ubuntu 10.10.
$ python -V
Python 2.6.6
$ curl -kL https://raw.github.com/utahta/pythonbrew/master/pythonbrew-install | bash
$ . $HOME/.pythonbrew/etc/bashrc
$ pythonbrew install 2.7.1
$ pythonbrew switch 2.7.1
Switched to Python-2.7.1
$ python -V
Python 2.7.1
Недавно я обратил Python 2.7 в сжатие Debian. Поскольку Ubuntu 10.10 новее, чем сжатие Debian, если вы можете сделать это на сжатии, вы можете сделать это на Ubuntu. У меня нет доступа к системе Ubuntu 10.10. Если я его установлю, я проверю его и обновлю ответ. Итак, здесь вместо этого приведен краткий очерк того, что я сделал на Debian.
Во-первых, общий и очевидный комментарий, но что-то, что легко упустить. Нельзя слишком серьезно относиться к перечисленным зависимостям сборки пакета Debian. Они могут быть гораздо более конкретными, чем необходимо. Например, программное обеспечение, такое как Python, которое предназначено для переносимости и запускается в широком спектре систем, вряд ли будет зависеть от очень конкретных версий программного обеспечения. Зависимости времени выполнения также могут быть скорректированы, но это следует делать с большей осторожностью. Однако зависимости времени выполнения обычно генерируются динамически на основе программного обеспечения, которое уже находится в этой системе, поэтому обычно это не большая проблема.
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
Выбрав тестовую версию, мы получим
apt-get source python2.7=2.7.2-8
Глядя на debian/control
, мы видим следующие строки зависимостей сборки.
Build-Depends: 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], locales [! 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 Build-Conflicts: tcl8.3-dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
Большая часть этого легко выполняется при сжатии. С помощью удобной утилиты apt-show-versions
мы получаем на моей машине
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
Мы видим, что все, кроме libtinfo-dev
, доступно в сжатии. У меня есть версии backport для сжатия debhelper
и python-sphinx
, но оба они также доступны для debian сжатия в версиях, удовлетворяющих требованиям сборки.
Обратите внимание, что у меня установлен libncurses5-dev
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Оба этих пакета соответствуют исходному пакету curses 5.7+20100313-5
. Заметим, что libtinfo-dev
фактически заменяет 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)
Нельзя ожидать, что python 2.7 будет развиваться в такой конкретной версии проклятий, а на самом деле это не так. Однако, если вы попытаетесь создать пакеты, не удовлетворяя зависимости, вы получаете
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.
Итак, необходимо отредактировать debian/control
. Обратите внимание, что вам также необходимо изменить файл debian/control.in
, иначе control
файл будет неправильно восстановлен из control.in
. Самое простое - просто удалить libncurses5-dev
из строки Build-Conflicts
и libtinfo-dev
из строки Build-Depends
, а затем запустите debuild -uc -us
еще раз. Если вы собираетесь установить этот пакет вместе со стандартными пакетами Python 2.6 по умолчанию на Debian, вы
также необходимо удалить две строки
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Эти строки существуют, потому что 2.7 включает функциональность python-profiler
.
Если 2.7 является питоном по умолчанию, тогда python-profiler
больше не требуется.
Однако, если вы устанавливаете 2.7 как нестандартный Python, это рассуждение не
применить, и python-profiler
по-прежнему требуется 2.6.
Это должно успешно сработать и привести к следующему списку двоичных пакетов.
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
Наконец, можно установить бинарные пакеты с помощью
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
Иногда dpkg
может немного затрудниться с выполнением зависимостей, когда все они будут установлены сразу, поэтому вам может потребоваться запустить apt-get -f install
после этого, если вы получите ошибки зависимостей или, альтернативно, установите пакеты в меньших группах.
Ну, если единственное, что вам нужно, это argparse (увидели, что в одном из ваших комментариев!) вы могли просто сделать:
pip install argparse
Это не совсем ответ на точный вопрос:-), но действительно, если вы просто не заметили какой-либо функции, многие функции 2.7 действительно поступают из независимых проектов и/или могут быть найдены некоторые пакеты совместимости, например:
Список 2.7 новинок, правда, длиннее, но большинство других новых функций, вероятно, не большая миссия, и взамен вы не путайтесь с несколькими установками python на вашем ящике. В противном случае перейдите к pythonbrew: -)
ubuntu 12.04
Установить зависимости:
$ sudo apt-get install python-software-properties
Добавить репо:
$ sudo add-apt-repository ppa:fkrull/deadsnakes
Обновить индекс репо:
$ sudo apt-get update
Установить Python 3.3:
$ sudo apt-get install python3.3
ubuntu 12.04 > подробнее
Установка зависимостей:
$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev
Загрузите и скомпилируйте python:
$ wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2
$ tar jxf ./Python-3.3.0.tar.bz2
$ cd ./Python-3.3.0
$ ./configure --prefix=/opt/python3.3
$ make && sudo make install
Некоторые приятные штрихи для установки команды py, создавая символическую ссылку:
$ mkdir ~/bin
$ ln -s /opt/python3.3/bin/python ~/bin/py
Другой вариант - установить ActivePython, если вы не хотите сами компилировать вещи. Он также включает двоичный менеджер пакетов.
Просто скачайте Python 2.7 из http://www.python.org/download/releases/2.7.1/ и создайте его.
Вы можете использовать virtualenv для создания различных сред Python. Просто быть новостным, но что у Python 2.7 есть, что вам нужно?