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.