Estoy buscando una forma de emular los enlaces simbólicos para las importaciones de Python. Me gustaría ser capaz de descomprimir la siguiente estructura de carpetas en el lugar y sin duplicación de archivos:¿Cómo puedo redirigir de forma transparente una importación de Python?
root
├─ python_lib
│ └─ my_utils
│ ├─ __init__.py
│ └─ etc.py
├─ app1
├─ app2
└─ app3
├─ lib
│ ├─ __init__.py
│ └─ my_utils.py
└─ run.py
app3/run.py
contiene esto:
from lib.my_utils import etc
etc.pancakes()
Me gustaría que el código para utilizar el etc
situado en python_lib/my_utils/
. ¿Hay algo que pueda poner en app3/lib/my_utils.py
para que Python> = 3.1 importe de forma transparente la carpeta python_lib/my_utils/
(usando rutas relativas y ..
), y los subpaquetes también funcionarán?
Esto no funcionaría si se pone en 'my_utils.py', ya que la ubicación de importación ya está resuelto para entonces. Si ejecuto esto antes de mi código principal, todavía no funcionará, porque cada subpaquete en 'my_utils' aparecería en el nivel superior de Python, y las importaciones relativas dentro de' my_utils' no funcionarían. – zildjohn01
Normalmente establezco rutas desde mi script 'run'. De lo contrario, no tiene mucho sentido. También podría intentar jugar con la variable de entorno 'PYTHONPATH'. Más información aquí http://docs.python.org/tutorial/modules.html#the-module-search-path – Elalfer