Sto cercando un modo per emulare i collegamenti simbolici per le importazioni Python. Mi piacerebbe essere in grado di decomprimere la seguente struttura delle cartelle sul posto, senza file di duplicazione:Come posso reindirizzare in modo trasparente un'importazione 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 questo:
from lib.my_utils import etc
etc.pancakes()
mi piacerebbe il codice per utilizzare il etc
situato in python_lib/my_utils/
. C'è qualcosa che posso inserire in app3/lib/my_utils.py
in modo che Python> = 3.1 importerà in modo trasparente la cartella python_lib/my_utils/
(utilizzando i percorsi relativi e ..
) e funzioneranno anche i pacchetti secondari?
Questo non avrebbe funzionato se messo in 'my_utils.py', dal momento che il percorso di importazione è già risolto da allora. Se lo eseguo prima del mio codice principale, non funzionerà, perché ogni subpackage in 'my_utils' apparirebbe di primo livello in Python, e quindi le importazioni relative all'interno di' my_utils' non funzionerebbero. – zildjohn01
Di solito ho impostato i percorsi dal mio script 'run'. Altrimenti non ha molto senso. Si potrebbe anche provare a giocare con la variabile d'ambiente 'PYTHONPATH'. Maggiori informazioni qui http://docs.python.org/tutorial/modules.html#the-module-search-path – Elalfer