Python 2.7 unter Ubuntu

72

Ich bin neu in Python und arbeite auf einem Linux-Computer (Ubuntu 10.10). Es läuft Python 2.6, aber ich möchte 2.7 ausführen, da es Funktionen hat, die ich verwenden möchte. Ich wurde aufgefordert, 2.7 nicht zu installieren und dies als meine Standardpython festzulegen.

Meine Frage ist, wie kann ich 2.7 installieren und neben 2.6 ausführen?

Jimdolan
quelle

Antworten:

108

Ich habe es mit Pythonbrew auf meinem Ubuntu 10.10-Computer gemacht.

$ 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

Ich habe es auch verwendet, um Python 3.2 zu installieren .

oylenshpeegul
quelle
2
Was macht die Linie. $ HOME / .pythonbrew / etc / bashrc tun?
Bharal
Sollte ich Pythonbrew nicht so einrichten, dass es immer verwendbar ist? heißt das nicht, dass ich ... ähm, etwas tun muss? Wenn ich mich abmelde und wieder anmelde, wird mein Pythonbrew vergessen. Ich denke, diese Zeile oben hat etwas damit zu tun ... aber was?
Bharal
Sie haben Recht, diese Zeile richtet Pythonbrew ein, indem alle Befehle in dieser Datei ausgeführt werden. Fügen Sie diese Zeile einfach zu Ihrer .bashrc-Datei hinzu, damit dies jedes Mal passiert.
Oylenshpeegul
1
Ich stimme zu, Pyenv funktioniert großartig !
Oylenshpeegul
Das hat mir auch sehr geholfen! Danke
Ivantha
10

Ich habe kürzlich Python 2.7 auf Debian Squeeze zurückportiert. Da Ubuntu 10.10 neuer als Debian Squeeze ist, können Sie es sicherlich auf Ubuntu tun, wenn Sie es auf Squeeze tun können. Ich habe keinen Zugriff auf ein Ubuntu 10.10-System. Wenn ich eine eingerichtet habe, werde ich sie testen und diese Antwort aktualisieren. Hier ist stattdessen eine kurze Skizze von dem, was ich auf Debian gemacht habe.

Zunächst ein allgemeiner und offensichtlicher Kommentar, der jedoch leicht übersehen werden kann. Man sollte die aufgelisteten Build-Abhängigkeiten eines Debian-Pakets nicht zu ernst nehmen. Sie können weitaus spezifischer als nötig sein. Beispielsweise ist es unwahrscheinlich, dass Software wie Python, die portabel ist und über eine Vielzahl von Systemen ausgeführt werden kann, von sehr spezifischen Softwareversionen abhängt. Die Laufzeitabhängigkeiten können ebenfalls angepasst werden, dies sollte jedoch mit größerer Vorsicht erfolgen. Laufzeitabhängigkeiten werden jedoch meist dynamisch basierend auf Software generiert, die sich bereits auf diesem System befindet. Daher ist dies normalerweise kein großes Problem.

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

Auswahl der Testversion, die wir erhalten

apt-get source python2.7=2.7.2-8

Wenn debian/controlwir uns das ansehen, sehen wir die folgenden Build-Abhängigkeitslinien.

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], Gebietsschemas [! 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-Konflikte: tcl8.3 -dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev

Das meiste davon lässt sich beim Drücken leicht befriedigen. Mit dem praktischen Dienstprogramm kommen apt-show-versionswir auf meine Maschine

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

Wir sehen, dass alles außer libtinfo-devin Squeeze verfügbar ist. Ich habe die Squeeze-Backport-Versionen von debhelperund python-sphinx, aber beide sind auch für Debian-Squeeze in Versionen verfügbar, die die Build-Anforderungen erfüllen.

Beachten Sie auch, dass ich libncurses5-dev installiert habe

apt-show-versions libncurses5-dev

libncurses5-dev/squeeze uptodate 5.7+20100313-5

Beide Pakete entsprechen dem Quellpaket curses 5.7+20100313-5. Beachten Sie, dass libtinfo-devin der Tat ersetzt 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)

Man würde nicht erwarten, dass sich Python 2.7 auf einer solchen spezifischen Version von Flüchen entwickelt, und tatsächlich ist dies nicht der Fall. Wenn Sie jedoch versuchen, die Pakete zu erstellen, ohne die erhaltene Abhängigkeit zu erfüllen

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.

Es ist also notwendig zu bearbeiten debian/control. Beachten Sie, dass Sie die Datei auch auf ähnliche Weise bearbeiten müssen debian/control.in, da sonst die control Datei fälschlicherweise neu generiert wird control.in. Am einfachsten ist es, sie libncurses5-dev aus der Build-ConflictsLinie und libtinfo-devaus der Build-DependsLinie zu entfernen und dann debuild -uc -us erneut auszuführen . Wenn Sie dieses Paket zusammen mit den Standard-Python 2.6-Standardpaketen auf Debian Squeeze installieren möchten, müssen Sie auch die beiden Zeilen entfernen

Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)

Diese Zeilen sind vorhanden, da 2.7 die python-profilerFunktionalität enthält. Wenn 2.7 die Standardpython ist, python-profilerist dies nicht mehr erforderlich. Wenn Sie jedoch 2.7 als nicht standardmäßiges Python installieren, gilt diese Argumentation nicht und python-profilerwird von 2.6 weiterhin benötigt.

Dies sollte erfolgreich erstellt werden und zu der folgenden Liste von Binärpaketen führen.

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

Schließlich kann man die Binärpakete mit installieren

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 

Manchmal dpkgkann es etwas schwierig sein, Abhängigkeiten zu erfüllen, wenn sie alle gleichzeitig installiert sind. Daher müssen Sie sie möglicherweise apt-get -f installspäter ausführen, wenn Abhängigkeitsfehler auftreten, oder Sie können die Pakete alternativ in kleineren Gruppen installieren.

Faheem Mitha
quelle
Haben Sie diesen Python-2.7-Squeeze-Port gepackt?
QwiglyDee
@qMax: Ich habe ein Paket basierend auf diesen Kommentaren erstellt, ja. Aber ich habe es nirgendwo öffentlich gemacht.
Faheem Mitha
Wenn 2.7.1-8 ausreichen würde, ist es einfacher. Holen Sie es sich von "deb-src ... snapshot.debian.org ... testing main", apt-get build-dep python2.6, apt-get install libexpat1 libexpat-dev. Und bauen Sie es für Squeeze wie es ist.
Alexei
5

Nun, wenn das einzige, was Sie brauchen, Argparse ist (das haben Sie in einem Ihrer Kommentare gesehen!), Können Sie einfach Folgendes tun:

pip install argparse

Dies ist nicht gerade eine Antwort auf die genaue Frage :-), aber wenn Sie nur einige wenige Funktionen vermissen, stammen viele 2.7-Funktionen tatsächlich aus unabhängigen Projekten und / oder einige Kompatibilitätspakete, z.

Die Liste der 2.7-Neuheiten ist zwar länger, aber die meisten anderen neuen Funktionen sind wahrscheinlich kein großer Fehler, und im Gegenzug spielen Sie nicht mit mehreren Python-Installationen auf Ihrer Box herum. Ansonsten geh mit Pythonbrew :-)

Stefano
quelle
3

Ubuntu 12.04

Abhängigkeiten installieren:

$ sudo apt-get install python-software-properties

Fügen Sie das Repo hinzu:

$ sudo add-apt-repository ppa:fkrull/deadsnakes

Aktualisieren Sie den Repo-Index:

$ sudo apt-get update

Installieren Sie Python 3.3:

$ sudo apt-get install python3.3

Ubuntu 12.04> mehr

Installieren der Abhängigkeiten:

$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev

Python herunterladen und kompilieren:

$ 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

Einige nette Details zum Installieren eines py-Befehls durch Erstellen eines Symlinks:

$ mkdir ~/bin
$ ln -s /opt/python3.3/bin/python ~/bin/py
Moddasir
quelle
1

Laden Sie einfach Python 2.7 von http://www.python.org/download/releases/2.7.1/ herunter und erstellen Sie es.


quelle
1
Vielen Dank. Ich habe diesen Teil bekommen, aber meine Frage ist eher, wie man zwischen den beiden Versionen hin und her wechselt. Mit Ruby verwende ich RVM, um mehrere Ruby-Versionen zu verwalten. Gibt es ein Äquivalent in Python oder ist es nicht notwendig?
Jimdolan
11
Verwenden Sie jedoch "make altinstall" anstelle von "make install". "make install" konfiguriert 2.7 als Standardversion und das möchten Sie nicht. "make altinstall" lässt das System Python in Ruhe und Sie müssen nur "python2.7" verwenden, um es aufzurufen.
casevh
Ja, make altinstall ist der richtige Weg.
Codeape
1
Hmm. Sie können es nicht "einfach bauen". Sie benötigen die Build-Abhängigkeiten. Versuchen Sie "aptitude build-dep python2.7" oder, wenn dies nicht funktioniert, "aptitude build-dep python2.6", bevor Sie versuchen, aus dem Quellcode zu erstellen. Wenn Sie dies nicht tun, werden Ihnen viele wichtige Bibliotheken fehlen.
Jason R. Coombs
1

Sie können virtualenv verwenden , um unterschiedliche Python-Umgebungen zu erstellen. Nur neu sein, aber was braucht Python 2.7, das Sie brauchen?

Tom
quelle
2
Ich möchte mit Argparse arbeiten. Ich bin Python Newsy, aber nicht Dev Newsy;)
Jimdolan
1
Flaggen auf regulären Ausdrücken!
Nils
Flaggen waren vor 2.7, AFAIK.
Tom
Um eine neue virtuelle Umgebung zu erstellen, muss auf Ihrem System eine Python installiert sein. Wenn Sie nur 2.6 installiert haben, können Sie mit Python 2.7 keine virtuelle Umgebung erstellen!
PawelRoman
@PawelRoman nein, aber das OP sagt, dass ihnen geraten wurde, 2.7 nicht zu ihrem Standard-Python zu machen. Kann es trotzdem installieren, ohne es zum Standard zu machen.
Tom
1

Eine andere Möglichkeit ist die Installation von ActivePython, wenn Sie die Dinge nicht selbst kompilieren möchten. Es enthält auch einen Binärpaket-Manager .

Sridhar Ratnakumar
quelle