Domanda esecuzione di un pacchetto python dopo la compilazione e il caricamento sul server pypicloud


gente,   Dopo aver creato e distribuito un pacchetto chiamato myShtuff su un server pypicloud locale, sono in grado di installarlo in un env virtuale separato.

Tutto sembra funzionare, tranne per il percorso dell'eseguibile ...

(venv)[ec2-user@ip-10-0-1-118 ~]$ pip freeze
Fabric==1.10.1
boto==2.38.0
myShtuff==0.1
ecdsa==0.13
paramiko==1.15.2
pycrypto==2.6.1
wsgiref==0.1.2

Se provo a eseguire direttamente lo script, ottengo:

(venv)[ec2-user@ip-10-0-1-118 ~]$ myShtuff
-bash: myShtuff: command not found

Tuttavia, posso eseguirlo tramite:

(venv)[ec2-user@ip-10-0-1-118 ~]$ python /home/ec2-user/venv/lib/python2.7/site-packages/myShtuff/myShtuff.py
..works

Sto commettendo un errore quando ho creato il pacchetto? Da qualche parte in setup.cfg o setup.py?

Grazie!!!


12
2018-05-13 03:44


origine


risposte:


Avete bisogno di un __main__.py nel pacchetto e un punto di ingresso definito in setup.py.

Vedere Qui e Qui ma in breve, il tuo __main__.py esegue qualunque sia la tua funzionalità principale durante l'esecuzione del modulo python -me setuptools può rendere qualsiasi funzione arbitraria che si desidera eseguire come script. Puoi fare entrambi o entrambi. Il tuo __main__.py sembra:

from .stuff import my_main_func

if __name__ == "__main__":
    my_main_func()

e in setup.py:

  entry_points={
  'console_scripts': [
      'myShtuffscript = myShtuff.stuff:my_main_func'
  ]

Qui, myShtuffscript è qualunque cosa tu voglia che l'eseguibile sia chiamato, myShtuff il nome del tuo pacchetto, stuff il nome del file nel pacchetto (myShtuff/stuff.py), e my_main_func il nome di una funzione in quel file.


9
2018-05-16 03:01



Devi definire entry_point nel tuo setup.py per eseguire direttamente qualcosa dalla riga di comando:

entry_points={
    'console_scripts': [
        'cursive = cursive.tools.cmd:cursive_command',
    ],
},

Maggiori dettagli possono essere trovati Qui.


4
2018-05-16 03:04