Python 2.7 на Ubuntu

Я новичок в Python и работаю на Linux-машине (Ubuntu 10.10). Он запускает python 2.6, но я бы хотел запустить 2.7, поскольку у него есть функции, которые я хочу использовать. Мне было настоятельно предложено не устанавливать 2.7 и установить это как мой python по умолчанию.

Мой вопрос в том, как я могу установить 2.7 и запустить его рядом с 2.6?

Ответ 2

Недавно я обратил 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 после этого, если вы получите ошибки зависимостей или, альтернативно, установите пакеты в меньших группах.

Ответ 3

Ну, если единственное, что вам нужно, это argparse (увидели, что в одном из ваших комментариев!) вы могли просто сделать:

pip install argparse

Это не совсем ответ на точный вопрос:-), но действительно, если вы просто не заметили какой-либо функции, многие функции 2.7 действительно поступают из независимых проектов и/или могут быть найдены некоторые пакеты совместимости, например:

Список 2.7 новинок, правда, длиннее, но большинство других новых функций, вероятно, не большая миссия, и взамен вы не путайтесь с несколькими установками python на вашем ящике. В противном случае перейдите к pythonbrew: -)

Ответ 4

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

Ответ 6

Вы можете использовать virtualenv для создания различных сред Python. Просто быть новостным, но что у Python 2.7 есть, что вам нужно?