Hintergrund:
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)?
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.
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.
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.
Der einfache Weg
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.
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).
Tags und Links python gnu ubuntu installation configure
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?
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.
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.
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!