Запуск пакета python после компиляции и загрузки на сервер pypicloud - программирование

Запуск пакета python после компиляции и загрузки на сервер pypicloud

Folks, После создания и развертывания пакета с именем myShtuff на локальном сервере pypicloud я могу установить его в отдельный виртуальный env.

Все работает, за исключением пути исполняемого файла...

(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

Если я попытаюсь запустить script напрямую, я получаю:

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

Однако я могу запустить его через:

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

Я ошибаюсь при создании пакета? Где-то в setup.cfg или setup.py?

Спасибо!!!

4b9b3361

Ответ 1

Вам нужен __main__.py в вашем пакете и точка входа, определенная в setup.py.

См. здесь и здесь, но вкратце, ваш __main__.py работает независимо от вашей основной функции при запуске вашего модуля с помощью python -m, а setuptools могут выполнять любые произвольные функции, которые вы хотите запускать в виде скриптов. Вы можете сделать то или другое. Ваш __main__.py выглядит следующим образом:

from .stuff import my_main_func

if __name__ == "__main__":
    my_main_func()

и в setup.py:

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

Здесь myShtuffscript - это то, что вы хотите, чтобы исполняемый файл был вызван, myShtuff имя вашего пакета, stuff имя файла в пакете (myShtuff/stuff.py) и my_main_func имя функция в этом файле.

Ответ 2

Вам нужно определить entry_point в вашем setup.py, чтобы непосредственно выполнить что-то из командной строки:

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

Более подробную информацию можно найти здесь.