Domanda

Ho provato ad aggiungere la seguente riga al mio script handler (main.py), ma non sembra funzionare:

  

sys.path.append ( 'sottocartella')

subdir vive nella mia directory principale (vale a dire la app.yaml quello che contiene).

Questo non sembra funzionare, perché quando si tenta di importare i moduli che vivono in subdir, i miei esplode app.

È stato utile?

Soluzione

1) Assicurarsi di avere un file __init__.py vuoto in subdir.

2) Utilizzare un percorso completo; qualcosa di simile a questo:

import os
import sys

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

Modifica: fornire maggiori informazioni per rispondere alle domande poste in un commento.

Come Nick Johnson dimostra è possibile inserire quelle tre righe di codice in un file chiamato fix_path.py. Poi, nel file main.py, fare questo import fix_path prima di tutte le altre importazioni. link a un'applicazione testato utilizzando questa tecnica .

E, sì, è necessario il file __init__.py; per il :

  

Quando si importa il pacchetto, Python   le ricerche attraverso le directory   sys.path cercando per il pacchetto   sottodirectory.

     

I file __init__.py sono tenuti a   rendere Python tratti correttamente le directory come   contenente pacchetti; questo è fatto per   evitare che directory con un comune   nome, ad esempio stringhe, da   involontariamente nascondendo moduli validi   che si verificano in seguito alla ricerca dei moduli   sentiero. Nel caso più semplice,   __init__.py può essere un file vuoto, ma può anche eseguire l'inizializzazione   codice per il pacchetto o impostare il   variabile __all__, descritto più avanti.

Altri suggerimenti

Ha funzionato per me l'inserimento delle nuove dirs come le prime voci in 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top