Hai tre opzioni di base qui. Ho passato tutti e tre in un ambiente di produzione e in progetti personali. In molti modi si costruiscono l'uno sull'altro. Tuttavia, il mio consiglio è di saltare all'ultima.
Il problema fondamentale è che è necessario che la directory ./src
si trovi nel percorso di ricerca python. Questo è davvero ciò che riguarda la confezione Python.
PYTHONPATH
Il, definito dall'utente modo più diretto per regolare il vostro percorso pitone è attraverso la variabile di ambiente PYTHONPATH
. È possibile impostare in fase di esecuzione, fare qualcosa di simile:
PYTHONPATH=/src python src/gui/gui.py
Ovviamente si può anche impostare questa funzione nel vostro ambiente globale così si spera tutti i processi che ne hanno bisogno troverà la corretta PYTHONPATH
. Ma ricorda, ne dimenticherai sempre uno. Di solito alle 3 del mattino quando l'attività cron
viene finalmente eseguita.
Pacchetti sito
evitare Ha bisogno di una variabile d'ambiente, le opzioni sono praticamente per includere il software in una voce esistente nel percorso di origine, o trovare qualche altro modo per aggiungere un nuovo percorso di ricerca.Pertanto, ciò può significare eliminare il contenuto della directory src
in /usr/lib/python2.7/site-packages
o ovunque si trovi il sistema site-packages
.
Poiché potresti non voler includere effettivamente il codice nei pacchetti del sito, puoi creare un link simbolico per i tuoi due sotto-pacchetti.
Questo è ovviamente meno che ideale per una serie di motivi. Se non si presta attenzione ai nomi, all'improvviso ogni programma python sulla macchina viene esposto a potenziali conflitti di nome. Stai esponendo il tuo software a tutti gli utenti della macchina. Potresti incorrere in problemi se python get viene aggiornato. Se aggiungi un nuovo sotto-pacchetto, ora devi creare un nuovo link simbolico.
Un approccio leggermente migliore consiste nell'includere un file .pth
da qualche parte nei pacchetti del sito. Quando Python incontra questi file, aggiunge il contenuto (che dovrebbe essere il nome di una directory) al percorso di ricerca. Ciò evita il problema di dover ricordare di aggiungere un nuovo link simbolico per ogni nuovo sottoprogetto.
virtualenv e confezionamento
La soluzione migliore è quella di mordere solo i denti e fare confezionamento pitone reale. Questo, combinato con ottimi strumenti come virtualenv and pip ti consente di avere un ambiente python isolato (o semi-isolato).
Sotto virtualenv, si avrebbe un site-packages
personalizzato per il proprio progetto in cui è possibile installare facilmente il software in esso, evitando tutti i problemi delle soluzioni precedenti. virtualenv semplifica inoltre la manutenzione degli script eseguibili in modo che l'ambiente Python in cui viene eseguito sia esattamente come previsto.
Uno svantaggio è che è necessario scrivere e mantenere un setup.py
che istruirà pip
(il programma di installazione python) per includere il software in virtualenv. Il contenuto sarebbe qualcosa di simile:
!/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
setup(
name='myproject',
package_dir={'myproject': 'src'},
scripts=['src/gui/gui.py', 'src/core/tools/tool1.py', 'src/core/tools/tool2.py']
)
Quindi, per impostare questo ambiente, che sta per essere simile a questa:
virtualenv env
env/bin/pip install -e setup.py
per eseguire lo script, allora si sarebbe solo fare qualcosa di simile:
env/bin/tool1.py
Per i principianti c'è 'python -m core.tools.tool1' – Kos
Quale versione di Python stai usando? – filmor
@filmor: modificato. – krlmlr