2012-12-30 11 views

risposta

4

Basta aggiungere un __init__.py file vuoto per segnalare baz è un modulo e, da foo.py fare:

from baz import bar 

meno che, naturalmente, si ha una buona ragione per non fare baz in un modulo (e utilizzare execfile).

+0

Grazie, sto lavorando su questo diritto adesso. – user1938464

1

La domanda implica che si desidera eseguirli come script, quindi sì: è possibile utilizzare execfile in 2.X o subprocess (chiamare l'interprete e passare lo script come argomento). Hai solo bisogno di fornire percorsi assoluti ai file.

# Python 2.X only! 
execfile ('c:/python/scripts/foo/baz/baz.py') 

Farlo letteralmente è fragile, ovviamente. Se baz è sempre una subirectory di foo si potrebbe derivare da di file di foo:

baz_dir = os.path.join(os.path.dirname(__file__), "baz") 
baz_file = os.path.join(baz_dir, "baz.py") 
execfile(baz_file) 

Se entrambi i file sono in posizioni che possono essere visti dal pitone - vale a dire, le cartelle sono in sys.path o sono stati aggiunto al percorso di ricerca utilizzando site è possibile importare baz da foo e richiamare direttamente le sue funzioni. Se devi effettivamente agire sulle informazioni di baz, invece di attivare un'azione, questo è un modo migliore di andare. As long as there is an init.py in each folder Si può solo fare

import baz 
baz.do_a_function_defined_in_baz() 
2

import sys, cambiamento "sys.path" aggiungendo il percorso durante la fase di esecuzione, quindi importare il modulo che vi aiuterà

Problemi correlati