2015-05-13 14 views
12

Ludzie, Po zbudowaniu i wdrożeniu pakietu o nazwie myShtuff na lokalny serwer pypicloud, jestem w stanie zainstalować go w osobnym środowisku wirtualnym.Uruchamianie pakietu Pythona po skompilowaniu i przesłaniu do serwera pypicloud

Wszystko wydaje się działać, z wyjątkiem ścieżki pliku wykonywalnego ...

(venv)[[email protected] ~]$ 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 

Gdybym spróbuj uruchomić skrypt bezpośrednio uzyskać:

(venv)[[email protected] ~]$ myShtuff 
-bash: myShtuff: command not found 

Jednak mogę go uruchomić przez:

(venv)[[email protected] ~]$ python /home/ec2-user/venv/lib/python2.7/site-packages/myShtuff/myShtuff.py 
..works 

Czy popełniam błąd podczas budowania pakietu? Gdzieś w setup.cfg lub setup.py?

Dzięki!

+0

Jaka jest konfiguracja.py? – skyline75489

+0

Czy próbowałeś uruchomić 'mojeShtuff.py'? – kichik

Odpowiedz

9

Potrzebujesz pakietu __main__.py i punktu wejścia zdefiniowanego w pliku setup.py.

Zobacz here i here ale w skrócie, twoje __main__.py działa niezależnie od głównego funkcjonalność podczas uruchamiania modułu używając python -m i setuptools może zrobić cokolwiek arbitralny funkcje chcesz uruchomić jako skrypty. Możesz zrobić jedno lub oba. Twój __main__.py wygląda następująco:

from .stuff import my_main_func 

if __name__ == "__main__": 
    my_main_func() 

aw setup.py:

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

Tutaj myShtuffscript jest cokolwiek chcesz wykonywalny nazywać, myShtuff nazwa pakietu, stuff nazwa pliku w pakiecie (myShtuff/stuff.py) i my_main_func nazwa funkcji w tym pliku.

4

Trzeba zdefiniować entry_point w swojej setup.py w celu wykonania czegoś bezpośrednio z linii poleceń:

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

Więcej szczegółów można znaleźć here.

Powiązane problemy