Tengo la siguiente estructura de carpetas.
aplicación/app/carpeta/archivo.py
y quiero importar algunas funciones de file.py en otro archivo Python que reside en
aplicación/app2/carpeta/archivo.py
He intentado
from aplicación.app.carpeta.archivo import func_nombre
y algunos otros intentos pero hasta ahora no he podido importar correctamente. ¿Cómo puedo hacerlo?
Por defecto, no se puede. Cuando se importa un fichero, Python sólo busca en el directorio actual, en el directorio desde el que se ejecuta el script de entrada y en sys.path
, que incluye ubicaciones como el directorio de instalación del paquete (en realidad es un poco más complejo que esto, pero cubre la mayoría de los casos).
Sin embargo, puedes añadir a la ruta de Python en tiempo de ejecución:
# some_file.py
import sys
# insert at 1, 0 is the script path (or '' in REPL)
sys.path.insert(1, '/path/to/application/app/folder')
import file
No tiene nada de malo:
from application.app.folder.file import func_name
Sólo asegúrate de que la carpeta
también contiene un __init__.py
, esto permite que se incluya como un paquete. No estoy seguro de por qué las otras respuestas hablan de PYTHONPATH
.
Creo que una forma ad-hoc sería utilizar la variable de entorno PYTHONPATH
como se describe en la documentación: Python2, Python3
# Linux & OSX
export PYTHONPATH=$HOME/dirWithScripts/:$PYTHONPATH
# Windows
set PYTHONPATH=C:\path\to\dirWithScripts\;%PYTHONPATH%