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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top