Bei jeder Antwort gibt es ein Problem, das wie folgt zusammengefasst werden kann: "Fügen Sie diese magische Beschwörung einfach am Anfang Ihres Skripts hinzu. Sehen Sie, was Sie mit nur ein oder zwei Codezeilen tun können." Sie werden nicht in jeder möglichen Situation funktionieren!
Zum Beispiel verwendet eine solche magische Beschwörung eine Datei . Wenn Sie Ihr Skript mit cx_Freeze verpacken oder IDLE verwenden, führt dies leider zu einer Ausnahme.
Eine andere solche magische Beschwörung verwendet os.getcwd (). Dies funktioniert nur, wenn Sie Ihr Skript über die Eingabeaufforderung ausführen und das Verzeichnis, das Ihr Skript enthält, das aktuelle Arbeitsverzeichnis ist (dh, Sie haben den Befehl cd verwendet, um vor dem Ausführen des Skripts in das Verzeichnis zu wechseln). Eh Götter! Ich hoffe, ich muss nicht erklären, warum dies nicht funktioniert, wenn sich Ihr Python-Skript irgendwo im PATH befindet und Sie es ausgeführt haben, indem Sie einfach den Namen Ihrer Skriptdatei eingegeben haben.
Glücklicherweise gibt es eine magische Beschwörung, die in allen von mir getesteten Fällen funktioniert. Leider ist die magische Beschwörung mehr als nur ein oder zwei Codezeilen.
import inspect
import os
import sys
# Add script directory to sys.path.
# This is complicated due to the fact that __file__ is not always defined.
def GetScriptDirectory():
if hasattr(GetScriptDirectory, "dir"):
return GetScriptDirectory.dir
module_path = ""
try:
# The easy way. Just use __file__.
# Unfortunately, __file__ is not available when cx_freeze is used or in IDLE.
module_path = __file__
except NameError:
if len(sys.argv) > 0 and len(sys.argv[0]) > 0 and os.path.isabs(sys.argv[0]):
module_path = sys.argv[0]
else:
module_path = os.path.abspath(inspect.getfile(GetScriptDirectory))
if not os.path.exists(module_path):
# If cx_freeze is used the value of the module_path variable at this point is in the following format.
# {PathToExeFile}\{NameOfPythonSourceFile}. This makes it necessary to strip off the file name to get the correct
# path.
module_path = os.path.dirname(module_path)
GetScriptDirectory.dir = os.path.dirname(module_path)
return GetScriptDirectory.dir
sys.path.append(os.path.join(GetScriptDirectory(), "lib"))
print(GetScriptDirectory())
print(sys.path)
Wie Sie sehen, ist dies keine leichte Aufgabe!