La distribuzione di un'applicazione di pitone
-
19-09-2019 - |
Domanda
Ho una semplice applicazione python dove la mia struttura di directory è la seguente:
- progetto /
- main.py
- config.py
- plugins /
- plugin1
- plugin2
- ...
Config.py carica solo i file di configurazione, non contiene alcuna informazione di configurazione in sé.
Ora voglio distribuire questo programma, e ho pensato di usare setuptools per farlo. Gli utenti di file sono tenuti a utilizzare è main.py, in modo che si va chiaramente in / usr / bin e il resto dei file andare in / usr / share / progetto.
Ma c'è un problema: avrei in qualche modo bisogno di dire main.py per cercare config.py nella directory di condivisione. Ma non posso essere veramente sicuri di dove esattamente la directory di condivisione è dato che è fino a setuptools, giusto?
Qual è la migliore procedura in distribuzione di applicazioni basati su Python?
Soluzione
setuptools installare il pacchetto in un luogo che è raggiungibile in pitone cioè è possibile importarlo:
import project
il problema rilancio quando si fanno le importazioni relative al posto delle importazioni assoluti. se i vostri importazioni main.py
config.py
funziona perché vivono nella stessa directory. quando si sposta il main.py
in un'altra posizione, come /usr/bin
o in un'altra sede attuale in PATH variabile d'ambiente, pitone provare a importare config.py
da sys.path
e non dal pacchetto di dir. la soluzione è quella di utilizzare l'importazione assoluto:
from project import config
ora main.py
è "mobile".
un'altra soluzione, che io preferisco, sta usando la creazione di script automatica offerto dal setuptools .
invece di avere il codice in un
if __name__ == "__main__":
# here all your beautiful code
dichiarazione, inserire il codice in una funzione (principale potrebbe essere un buon nome):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
ora modificare la setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
questo è tutto. dopo un install setuptools creerà uno script wrapper che è richiamabile da shell e che chiama la funzione principale. ora main.py
può vivere nella directory del progetto e non avete più bisogno di muoversi in una directory bin/
. notare che setuptools mette automaticamente questo script nella directory bin/
relativo al prefisso di installazione.
es.
python setup.py install --prefix ~/.local
installare il pacchetto di progetto in
~/.local/lib/python<version>/site-packages/<package_name>
e lo script in
~/.local/bin/<script_name>
in modo da essere sicuri che ~/.local/bin
è presente nel vostro PATH env.
Per maggiori informazioni: http://peak.telecommunity.com/DevCenter / setuptools #-script-creazione automatica