5

Quindi la mia struttura di directory simile a questa:Google App Engine librerie di importazione dalla cartella principale

\Project-Dir\ 
|- lib\ 
| |- flask\ 
| |- ... 
|- module1_dir\ 
| |- __init__.py 
| |- app.yaml 
| |- app.py 
| |- ... 
|- module2_dir\ 
| |- __init__.py 
| |- app.yaml 
| |- app.py 
| |- ... 
|- ... 

All'interno app.py

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) 

Ho due moduli all'interno della stessa directory principale. Sono entrambi distribuiti su App Engine insieme. Condividono anche le stesse librerie. Le librerie sono tutte abbastanza robuste quindi sto provando a metterle in una directory condivisa (lib).

Sto correndo dev_appserver.py da \Project-Dir\ e passando i due .yamls. Il mio sys.path è impostato bene per includere la directory lib\. Eppure la sandbox sembra ostinatamente insistere sul fatto che le librerie in lib\non esistono.

Sono sicuro che mi manca solo qualcosa di piccolo come un cambiamento di configurazione da qualche parte. Oppure App Engine non è in grado di supportare tale configurazione?

MODIFICA: Le importazioni funzionano correttamente quando viene eseguito all'esterno di dev_appserver.py.

+0

Si crea un '__init __. Py' nel pacchetto python? Oppure mostra la tua directory totale. –

+0

E come stai configurando il tuo 'sys.path', troppe volte ho visto che è semplicemente sbagliato. –

risposta

4

Ho parlato con un tecnico dell'assistenza Google, dopo aver affrontato lo stesso problema. Sfortunatamente, GAE non supporta questo tipo di installazione.

Quando si utilizza l'API Moduli, il modulo 1 e il modulo 2 vengono eseguiti in ambienti virtuali Python separati come istanze autonome separate. Non possono "vedere" il contenuto della loro directory principale. La modifica di sys.path non fa la differenza.

ci sono due soluzioni:

(a) Duplica cartella 'lib' mettendo dentro sia 'module1_dir' e 'module2_dir'.

(b) Posizionare i file del modulo direttamente nella directory principale.