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?

È stato utile?

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

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