Unter Ubuntu, wie installierst du eine neuere Version von Python und behältst die ältere Python-Version?

8

Hintergrund:

  • Ich benutze Ubuntu
  • Die neuere Python-Version befindet sich nicht im Repository von apt-get (oder synaptic)
  • Ich plane, die alte Version als Standard-Python beizubehalten, wenn Sie "python" von der Befehlszeile
  • aufrufen
  • Ich plane den Aufruf des neuen Pythons mit pythonX.X (X.X ist die neue Version).

Wie installieren Sie eine neuere Version von Python und behalten Sie die ältere Python-Version?

Ich habe von python.org das Paket "install from source" * .tgz heruntergeladen. Das Readme ist ziemlich einfach und sagt "führe drei Befehle aus: ./configure; make; make test; sudo make install;"

Wenn ich die obigen Befehle tue, überschreibt die Installation die alte Version von Python, die ich habe (ich brauche definitiv die alte Version)?

    
Trevor Boyd Smith 16.06.2010, 03:18
quelle

4 Antworten

9

Wenn Sie von der Quelle installieren, wird die Installation standardmäßig in /usr/local ausgeführt - die ausführbare Datei wird insbesondere /usr/local/bin/pythonX.Y mit einem Symlink, der den Namen /usr/local/python hat. Die eigene Installation von Ubuntu ist in /usr/ (z. B. /usr/bin/python ), so dass die neue Installation sie nicht überschreibt. Achten Sie darauf, dass die PATH -Umgebungsvariable nicht /usr/local/bin vor /usr/bin hat, oder die einfache Erwähnung von python würde die neue ausführen, nicht die alte.

    
Alex Martelli 16.06.2010, 03:20
quelle
3

Ich gehe nur davon aus, dass du mit "neuere Version" meinst "freigegebene Version, die neuer ist als die Standardversion in Ubuntu". Das bedeutet Python 3.1, welches sich in den Repositories befindet .

%Vor%

Verschiedene Python-Versionen in den Ubuntu-Repositories können problemlos miteinander koexistieren. Wenn Sie eine ältere Ubuntu-Version als Lucid verwenden, müssen Sie Ihr Betriebssystem aktualisieren oder das Universumsrepository aktivieren, damit python3 in Ihrem Paketmanager angezeigt wird.

Wenn Sie Python 2.7 meinen, sollten Sie sich bewusst sein, dass es noch nicht veröffentlicht wurde.

    
ʇsәɹoɈ 16.06.2010 03:25
quelle
1

Gerade Python2.6 auf Ubuntu 8.04 installiert.
Zuerst erhalten Sie alle erforderlichen Abhängigkeiten "apt-get build-dep python2.5" (Die Python 2.6-Abhängigkeiten sind die gleichen wie für 2.5) Wende den Patch von Ссылка an:
Patch -p1 & lt; python2.6-disable-alt-modules.patch

dann ./configure --prefix = / opt / python2.6
mache ich sudo make install

sudo ln -s /opt/python2.6/bin/python2.6 /usr/local/bin/python2.6
Es scheint einfach zu funktionieren, Standard-Python-Version ist immer noch 2.5. Ich spare es bei hier , hoffe, das hilft.

    
sunqiang 16.06.2010 04:44
quelle
0

Der einfache Weg

  • Öffnen Sie 'Synaptic Package Manager' aus dem Menü
  • Suchen Sie im Feld 'Schnellsuche' nach 'python'
  • Wählen und installieren Sie alle Python-Versionen, die Sie verwenden möchten

Um eine bestimmte Version von Python (Beispiel 2.4) zu verwenden, geben Sie python gefolgt von der Versionsnummer im Terminal ein:

%Vor%

Um Bibliotheken zu einer bestimmten Version von Python zu installieren, führen Sie einfach setup.py auf die gleiche Weise aus.

Bsp. Installiere zu python2.5

%Vor%

Heutzutage ist es nicht mehr notwendig, aus Quellen zu erstellen oder sich über Abhängigkeiten zu kümmern, es sei denn, Sie entwickeln es direkt oder Sie verwenden einen hochmodernen, nicht stabilen Zweig.

Wenn die neueren stabilen Versionen von Python nicht in apt-get oder synaptic angezeigt werden, aktualisieren Sie Ihr Repository.

  • in Synaptic drücken Strg-r
  • in apt geben Sie 'apt-get update'
  • ein

Hinweis: Sie sollten wirklich in der Lage sein, alle stabilen Versionen von Python von 2.4 - 3.1 mit Ausnahme von 3.0 zu erhalten (weil 3.0 hauptsächlich als Folge des 'Wegwerfens' gelöscht wurde). Art der Veränderungen in diesem speziellen Zweig und die Entstehung von 3.1).

    
Evan Plaice 17.06.2010 01:16
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Vor etwa einem Jahr bin ich über eine nette Funktion in Java gestolpert, die ich nicht für das Leben von mir wieder finden kann.

Durch eine magische Schnittstelle war es offensichtlich möglich, einige Klassen oder Funktionen zur Laufzeit austauschbar zu machen.
Ich fand ein gutes Beispiel für jemanden, der ein einfaches Programm mit einer bestimmten Nachricht erstellt hat. Dann hat er das Programm mit einer Methode aktualisiert, an die ich mich nicht mehr erinnern kann, und plötzlich hat das Programm diese alte Druckfunktion durch eine neue ersetzt.

Ich habe versucht, durch die Java-API zu schauen, um sowohl mein Gedächtnis als auch das Googlen zu erzeugen, aber ohne Erfolg. Kann hier jemand helfen?

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123runtime ___ Runtime ist die Zeit, in der ein Programm läuft (ausgeführt wird) ___ answer3079298 ___

Verschiedene App-Container können dies tun.

Grundsätzlich müssten Sie die Klasse in einem neuen %code% neu laden (es sei denn, Sie sprechen darüber unter dem Debugger, in diesem Fall gibt es völlig andere APIs verfügbar).

Meiner Meinung nach lohnt sich die Sache nur selten: Alles so zu gestalten, dass es neu geladen werden kann, ist wesentlich schwieriger als das Entwerfen, sodass es in einem neuen Prozess komplett neu gestartet werden kann. Es ist auch einfacher sicher zu sein, welcher Code gerade ausgeführt wird, wenn nur eine Version in den Prozess geladen wird.

Es ist eine nette Sache, eine Demo zu erstellen, aber für meisten Anwendungen lohnt es sich nicht. Alles meiner Meinung nach natürlich:)

Beachten Sie, dass eine wichtige Ausnahme die Möglichkeit ist, Web-UI-Layer neu zu laden, ohne den Container neu zu starten: das kann das Leben viel erleichtern.

    
___ answer3079358 ___

Das ist normalerweise die Art von Funktionalität, die ich der Infrastruktur gerne hinterlasse, da es schwierig ist, richtig und leicht falsch zu geraten. Wie Jon oben erwähnt, die meisten Anwendungen brauchen es nicht und für diejenigen, die es brauchen Infrastruktur ist verfügbar.

Die meisten Anwendungsserver erlauben heutzutage eine Hot-Deployment, und ebenso sind die meisten Anwendungsserver einbettbar und erlauben es, diese zu entfernen, um Features zu entfernen, die Sie nicht benötigen.

Wenn es hauptsächlich für die Entwicklung ist, sollten Sie einen JRebel suchen, der diese Funktionalität transparent bereitstellt. Ich habe gehört, dass sie an einer Runtime-Lösung arbeiten, aber ich weiß nicht, ob sie zur Primetime bereit ist.

Wenn Sie wirklich motiviert sind, dies zum Laufen zu bringen, sollten Sie OSGi verwenden. Es hat eine steile Lernkurve, aber wenn man es erst einmal gemacht hat, macht es die meisten Dinge richtig und funktioniert sehr gut. Ich fand die Pax-Tools als guten Ausgangspunkt, aber die Eclipse-Toolchain bietet auch eine gute Unterstützung dafür.

    
___ answer3079401 ___

Die HotSwap -Technologie wurde zu Java 1.4 hinzugefügt und aktiviert zur Laufzeit die Klassendatei replacement . Die Funktion wird über die %code% Methode der Instrumentierung Paket. Ich denke, Sie können dies auch über die JPDA -Schnittstelle tun.

Hier ist auch ein Verweis auf das, was ich glaube, ist die Forschungsarbeit, die den HotSwap-Mechanismus zuerst beschreibt:

Ansonsten können Sie Classloader verwenden, wie in der anderen Erwähnung, aber nur dynamisches Laden von Klassen , nicht Ersatz. Dieselbe Klasse, die zweimal geladen wird, wird als zwei verschiedene Arten betrachtet. Kombiniert mit einer Schnittstelle und / oder ein wenig Reflektion, kann es jedoch Möglichkeiten bieten, die Anwendung zur Laufzeit zu aktualisieren.

Hier ist ein Verweis auf ein tolles Paper über Klassenlader und dessen Verwendung:

Ich werde nicht darauf eingehen, ob das gut oder schlecht ist, weil es nicht Ihre Frage war, aber ich finde es großartig, Unterstützung für die Laufzeit-Softwareentwicklung zu haben - schade, dass JSR-117 hat es nie geschafft!

    
___