ho un po 'di codice che carica un file di configurazione di default e quindi consente agli utenti di fornire i propri file Python come ulteriore configurazione supplementare o le sostituzioni delle impostazioni predefinite:Python: execfile dalla directory di lavoro di altri file?
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
C'è un problema, però: execfile()
esegue direttive il file specificato da cfg_path
come se fosse nella directory di lavoro di foo.py
, non la propria directory di lavoro. Pertanto, le direttive import
potrebbero non riuscire se il file cfg_path
fa, ad esempio, from m import x
dove m
è un modulo nella stessa directory di cfg_path
.
Come faccio a execfile()
dalla directory di lavoro del suo argomento, o altrimenti raggiungere un risultato equivalente? Inoltre, mi è stato detto che execfile
è deprecato in Python 3 e che dovrei usare exec
, quindi se c'è un modo migliore che dovrei fare, sono tutto orecchie.
Nota: Non penso che le soluzioni che cambiano semplicemente la directory di lavoro siano corrette. Ciò non metterà quei moduli sul percorso di ricerca del modulo dell'interprete, per quanto posso dire.
Grazie per la risposta. Sfortunatamente, questo non sembra funzionare per me. 'execfile()' sembra che stia avviando un processo completamente nuovo con la propria directory di lavoro, che non è la stessa di quella da cui lancio. –
No, @Kyle, 'execfile' non avvia un processo separato, e ** fa ** rispetta la directory di lavoro corrente. Modifica la mia risposta per mostrare un semplice esempio dimostrando che ti stai sbagliando. –