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.

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top