Question

Je l'ai essayé d'ajouter la ligne suivante à mon script de gestionnaire (de main.py), mais il ne semble pas fonctionner:

  

sys.path.append ( 'subdir')

subdir vit dans le mon répertoire racine (à savoir celui qui contient de app.yaml).

Cela ne semble pas fonctionner, parce que quand je tente d'importer des modules qui vivent dans subdir, mes explose app.

Était-ce utile?

La solution

1) Assurez-vous que vous avez un fichier vide dans __init__.py subdir.

2) Utiliser un chemin d'accès complet; quelque chose comme ceci:

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))

Edit: fournir plus d'informations pour répondre aux questions posées dans un commentaire.

Comme Nick Johnson montre vous pouvez placer ces trois lignes de code dans un fichier appelé fix_path.py. Ensuite, dans votre fichier main.py, faire import fix_path avant toutes les autres importations. Lien vers une application testée à l'aide de cette technique .

Et, oui, le fichier __init__.py est nécessaire; par :

  

Lors de l'importation du paquet, Python   des recherches dans les répertoires   sys.path recherche du paquet   sous-répertoire.

     

Les fichiers __init__.py doivent   faire Python traiter les répertoires comme   contenant des paquets; cela se fait à   éviter les répertoires avec une commune   nom, comme chaîne, de   cacher involontairement modules valides   qui se produisent plus tard sur la recherche du module   chemin. Dans le cas le plus simple,   __init__.py peut juste être un fichier vide, mais il peut également exécuter l'initialisation   code pour le paquet ou ensemble le   variables __all__, décrite plus loin.

Autres conseils

Il a fonctionné pour moi d'insérer les nouveaux dirs que les premières entrées dans sys.path.

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top