Wie kann ich Python im main.py-Modul (vermutlich) mitteilen, welcher Interpreter verwendet werden soll? Was ich meine ist: Wenn ich möchte, dass ein bestimmtes Skript Version 3 von Python verwendet, um das gesamte Programm zu interpretieren, wie mache ich das?
Bonus: Wie würde sich dies auf eine virtuelle Umgebung auswirken? Habe ich Recht, wenn ich eine virtuelle Umgebung für mein Programm erstelle und es dann anweise, eine andere Version von Python zu verwenden, kann es zu Konflikten kommen?
quelle
install.py
?Vielleicht nicht genau das, was Sie gefragt haben, aber ich finde es nützlich, dies zu Beginn meiner Programme zu setzen:
import sys if sys.version_info[0] < 3: raise Exception("Python 3 or a more recent version is required.")
quelle
print "hello world"
Kompilierung durchzuführen . Ich denke, es ist nur die Druckaussage selbst, die sich geändert hat, daher meine Verwirrung. Vielen Dank für die Klarstellung, dass dies in allen Versionen von Python funktioniert, da dies unerlässlich ist.Ich würde den Shebang
#!/usr/bin/python
(erste Codezeile) mit der Seriennummer von Python am Ende verwenden;)Führen Sie dann die Python-Datei als Skript aus, z. B.
./main.py
über die Befehlszeile und nicht über die Befehlszeilepython main.py
.Dies ist auch dann der Fall, wenn Sie Python über eine Linux-Befehlszeile ausführen möchten.
quelle
python <python-file>
vom Terminal aus ausführen .Während das OP möglicherweise auf einer Nix-Plattform arbeitet, könnte diese Antwort Nicht- Nix-Plattformen helfen . Ich habe den Shebang-Ansatz in Microsoft Windows noch nicht erlebt.
Umformuliert: Die Shebang-Zeile beantwortet Ihre Frage " innerhalb meines Skripts ", aber ich glaube nur für Unix-ähnliche Plattformen. Obwohl es die Unix-Shell außerhalb des Skripts ist, die die Shebang-Zeile tatsächlich interpretiert, um zu bestimmen, welche Version des Python-Interpreters aufgerufen werden soll. Ich bin nicht sicher, aber ich glaube, dass die Lösung das Problem für Benutzer der Microsoft Windows-Plattform nicht löst.
In der Microsoft Windows-Welt können Sie die Ausführung einer bestimmten Python-Version ohne Umgebungsvariablen, die speziell für jede installierte Python-Version eingerichtet wurden, vereinfachen, indem Sie der Datei python.exe den Pfad voranstellen, von dem aus Sie sie ausführen möchten, z C: \ Python25 \ python.exe mymodule.py oder D: \ Python27 \ python.exe mymodule.py
Sie müssen jedoch die Umgebungsvariablen PYTHONPATH und andere PYTHON ... berücksichtigen, die auf die falsche Version der Python-Bibliotheken verweisen.
Beispielsweise könnten Sie Folgendes ausführen: C: \ Python2.5.2 \ python.exe mymodule
Die Umgebungsvariablen können jedoch auf die falsche Version als solche verweisen:
PYTHONPATH = D: \ Python27
PYTHONLIB = D: \ Python27 \ lib
Jede Menge schrecklicher Spaß!
Ein nicht virtueller Weg in Windows wäre daher die Verwendung einer Batchdatei, die die Umgebung einrichtet und eine bestimmte ausführbare Python-Datei aufruft, indem der python.exe der Pfad vorangestellt wird, in dem sie sich befindet. Auf diese Weise erhalten Sie zusätzliche Details zu verwalten; Verwenden Sie beispielsweise Befehlszeilenargumente für den Befehl "start" oder "cmd.exe", um die "Konsolen" -Umgebung zu speichern und zu ersetzen, wenn die Konsole nach dem Beenden der Anwendung erhalten bleiben soll.
Ihre Frage lässt mich glauben, dass Sie mehrere Python-Module haben, von denen jedes eine bestimmte Version von Python erwartet. Dies kann "innerhalb" des Skripts lösbar sein, indem ein Startmodul vorhanden ist, das das Unterprozessmodul verwendet . Anstatt mymodule.py aufzurufen , würden Sie ein Modul aufrufen, das Ihr Modul aufruft. vielleicht launch_mymodule.py
launch_mymodule.py
import sys import subprocess if sys.argv[2] == '272': env272 = { 'PYTHONPATH': 'blabla', 'PYTHONLIB': 'blabla', } launch272 = subprocess.Popen('D:\\Python272\\python.exe mymodule.py', env=env272) if sys.argv[1] == '252' env252 = { 'PYTHONPATH': 'blabla', 'PYTHONLIB': 'blabla', } launch252 = subprocess.Popen('C:\\Python252\\python.exe mymodule.py', env=env252)
Ich habe das nicht getestet.
quelle
con
ist , dass Sie tatsächlich einen benutzerdefinierte Python - Skript für jede Version von Python schreiben müssen , die Sie testen wollen. Dies ist nicht dasselbe wie das OP der Verwendung der bevorzugten Python-Version des Skripts.Sie können dies nicht innerhalb des Python-Programms tun, da die Shell entscheidet, welche Version verwendet werden soll, wenn Sie eine Shebang-Zeile verwenden.
Wenn Sie keine Shell mit einer Shebang-Linie verwenden und nur eingeben
python myprogram.py
, wird die Standardversion verwendet, es sei denn, Sie entscheiden speziell, welche Python-Version Sie verwenden, wenn SiepythonXXX myprogram.py
die zu verwendende Version eingeben.Sobald Ihr Python-Programm ausgeführt wird, haben Sie bereits entschieden, welche ausführbare Python-Datei zum Ausführen des Programms verwendet werden soll.
virtualenv
dient zur Trennung von Python-Versionen und -Umgebungen und dient speziell zur Beseitigung von Konflikten.quelle
virtualenv
Sie alle Details zu dem Problem, das es löst.Während Sie mit verschiedenen Versionen von Python unter Windows arbeiten,
Ich benutze diese Methode, um zwischen Versionen zu wechseln.
Ich denke, es ist besser, als sich mit Shebangs und Virtualenvs herumzuschlagen
1) Installieren Sie die gewünschten Python-Versionen
2) Gehen Sie zu Umgebungsvariablen> PFAD
(Ich gehe davon aus, dass Pfade von Python-Versionen bereits zu Env.Vars hinzugefügt wurden.> PATH)
3) Unterdrücken Sie die Pfade aller Python-Versionen, die Sie nicht verwenden möchten
(Löschen Sie die Pfade nicht, fügen Sie einfach ein Suffix wie "_sup" hinzu.)
4) Rufen Sie Python vom Terminal aus auf
(Windows überspringt also die falschen Pfade, die Sie geändert haben, und findet die Datei python.exe unter dem Pfad, den Sie nicht unterdrückt haben, und verwendet diese Version nach dem)
5) Wechseln Sie zwischen den Versionen, indem Sie mit Suffixen spielen
quelle
Setzen Sie zu Beginn meiner Programme seine volle Nutzung für die Arbeit mit Python
import sys if sys.version_info[0] < 3: raise Exception("Python 3 or a more recent version is required.")
Dieser Code hilft voll für den Fortschritt
quelle
Ich hatte dieses Problem und habe gerade beschlossen, eines der Programme von python.exe in python2.7.exe umzubenennen. Jetzt kann ich an der Eingabeaufforderung angeben, welches Programm einfach ausgeführt werden soll, ohne Skripte einzuführen oder Umgebungspfade zu ändern. Ich habe also zwei Programme: Python2.7 und Python (letzteres ist v.3.8, auch bekannt als Standard).
quelle