Condivisione di moduli di utilità tra progetti Python
-
10-07-2019 - |
Domanda
Quale sarebbe la migliore strategia di struttura di directory per condividere un modulo di utilità attraverso i miei progetti Python? Dato che i moduli comuni verrebbero aggiornati con nuove funzioni non vorrei metterli nella directory di installazione di Python.
project1/
project2/
sharedUtils/
Dal progetto1 non riesco a usare " import .. \ sharedUtils " esiste un altro modo? Preferirei non codificare il "shareUtils" posizione
Grazie in anticipo
Soluzione
Creare un pacchetto autonomo separato? E metterlo nei pacchetti / site della tua installazione di Python?
C'è anche il mio preferito personale quando si tratta di modalità di sviluppo: uso di symlink e / o file * .pth
.
Altri suggerimenti
Supponi di avere sharedUtils / utils_foo
e sharedUtils / utils_bar
.
Puoi modificare il tuo PYTHONPATH per includere sharedUtils
, quindi importarli in project1
e project2
utilizzando
import utils_foo
import utils_bar
etc.
In Linux puoi farlo modificando ~ / .profile con qualcosa del genere:
PYTHONPATH=/path/to/sharedUtils:/other/paths
export PYTHONPATH
L'uso della variabile d'ambiente PYTHONPATH influenza le directory che Python cerca quando cerca i moduli. Poiché ogni utente può impostare il proprio PYTHONPATH, questa soluzione è adatta a progetti personali.
Se vuoi che tutti gli utenti della macchina siano in grado di importare moduli in sharedUtils
, allora
puoi farlo usando un file .pth
. Il punto esatto in cui si inserisce il file .pth
può dipendere dalla distribuzione di Python. Vedere
http: //bob.pythonmac. org / archives / 2005/02/06 / usando-PTH-files-per-python-sviluppo /
Struttura della directory:
project1/foo.py
sharedUtils/bar.py
Con le directory come le hai mostrate, da foo.py
all'interno della directory project1
puoi aggiungere il relativo percorso a sharedUtils
come segue:
import sys
sys.path.append("../sharedUtils")
import bar
Questo evita l'hardcoding di un percorso C: /../ sharedUtils
e funzionerà finché non cambi la struttura della directory.