Wie Sie sys.path in Google App Engine (Python) ändern?
-
23-09-2019 - |
Frage
Ich habe versucht, die folgende Zeile zu meiner Handler-Skript (main.py), aber es scheint nicht zu arbeiten:
sys.path.append ( 'subdir')
subdir
Leben in dem meinem Stammverzeichnis (das heißt das eine, die app.yaml
).
Dies scheint nicht zu arbeiten, denn wenn ich auf die Importmodule versuchen, die in subdir
leben, meine App explodiert.
Lösung
1) Stellen Sie sicher, Sie eine leere __init__.py
Datei in subdir
haben.
2) Verwenden Sie einen vollständigen Pfad; so etwas wie folgt aus:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
Edit: die Bereitstellung von mehr Informationen zur Beantwortung von Fragen in einem Kommentar gefragt.
Als Nick Johnson zeigt Sie diese drei Zeilen Code in einem Ort kann Datei namens fix_path.py
. Dann in Ihrer main.py
Datei, tut dies import fix_path
vor allen anderen Importen. Link zu einer getesteten Anwendung dieser Technik verwenden.
Und, ja, die __init__.py
Datei erforderlich ist; pro Dokumentation :
Wenn das Paket zu importieren, Python Suchen Sie durch die Verzeichnisse sys.path Suche für das Paket Unterverzeichnis.
Die
__init__.py
Dateien sind erforderlich, um machen Python behandeln die Verzeichnisse als Pakete enthalten; Dies geschieht, um Verhindern, dass Verzeichnisse mit einem gemeinsamen Name, wie String, aus unbeabsichtigt versteckt gültig Module dass später auf dem Modulsuch auftreten Pfad. Im einfachsten Fall,__init__.py
kann nur eine leere Datei sein, aber es kann auch ausführen Initialisierung Code für das Paket oder eine Reihe der__all__
Variable, wie später beschrieben.
Andere Tipps
Es ist für mich gearbeitet, die neuen Verzeichnisse als die ersten Einträge in sys.path eingefügt wird.
path_changer.py:
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps'))
app.py:
import path_changer
from google.appengine.ext.webapp.util import run_wsgi_app
from flask import Flask
import settings
app = Flask('myapp')
app.config.from_object('settings')
from website import views as website_views
run_wsgi_app(app)