tengo algo de código que carga un archivo de configuración por defecto y luego permite que los usuarios proporcionan sus propios archivos de Python como configuración adicional suplementario o anulaciones de los valores por defecto:Python: execfile del directorio de trabajo de otros archivos?
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
Hay un problema, sin embargo: execfile()
ejecuta las directivas de el archivo especificado por cfg_path
como si estuviera en el directorio de trabajo foo.py
, no su propio directorio de trabajo. Por lo tanto, las directivas import
pueden fallar si el archivo cfg_path
hace, digamos, from m import x
donde m
es un módulo en el mismo directorio que cfg_path
.
¿Cómo hago para execfile()
desde el directorio de trabajo de su argumento, o de otra forma alcanzo un resultado equivalente? Además, me dijeron que execfile
está en desuso en Python 3 y que debería estar usando exec
, así que si hay una forma mejor de hacerlo, soy todo oídos.
Nota: No creo que las soluciones que simplemente cambian el directorio de trabajo sean correctas. Eso no pondrá esos módulos en la ruta de búsqueda de módulos del intérprete, hasta donde yo sé.
Gracias por la respuesta. Desafortunadamente, esto no parece funcionar para mí. 'execfile()' parece estar iniciando un proceso completamente nuevo con su propio directorio de trabajo, que no es el mismo que el que estoy iniciando. –
No, @Kyle, 'execfile' no inicia un proceso por separado, y ** respeta ** el directorio de trabajo actual. Editando mi respuesta para mostrar un ejemplo simple que demuestre que estás equivocado. –