2017-02-03 9 views
1

Я хочу сделать исполняемый файл пакета python из командной строки.Как сделать пакет исполняемым из командной строки?

Я знаю, что вы можете сделать chmod +x myfile.py где myfile.py начинается с #!/usr/bin/env, чтобы сделать один исполняемый файл с помощью ./myfile.py. Я также знаю, что вы можете сделать python -m mypackage для запуска пакета, включая __main__.py.

Однако, если добавить притон линию к __main__.py пакета, запустите chmod +x mypackage и попробуйте ./mypackage, я получаю ошибку -bash: ./mypackage: Is a directory.

Можно ли запускать такой пакет?

(Чтобы было ясно, я не ищет что-то вроде py2exe, чтобы сделать это автономный исполняемый файл. Я все еще надеясь, что это будет истолковано, я просто хочу, чтобы сделать запуск проще)

+0

Вам необходимо запустить * файл *, а не каталог. Что происходит с запуском ./mypackage/__main__.py? Python может знать, как найти основную программу, но оболочка Linux этого не делает. – Prune

+2

* Можно ли запускать такой пакет? * <= Нет. Но почему бы не отказаться от сценария оболочки? – dhke

+2

Возможно, вы захотите заглянуть в точку ввода [setuptools 'console_scripts] (http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point). * (Предполагая, что ваш пакет является надлежащим дистрибутивом 'setuptools', содержащим' setup.py' и т. Д.) * –

ответ

0

Короткий ответ No.

Когда вы делаете chmod +x mypackage вы ничего не делаете, потому что mypackage это каталог и каталоги уже выполнить флаг (или вы не в состоянии перечислить их файлы). Если вы наберете: ls -l, вы увидите.

Ваши варианты запуска сразу всего пакета без его установки - это то, как вы уже упоминаете: python -m mypackage, или создайте сценарий оболочки, который сделает это за вас.

Я вижу, что ваши намерения состоят в том, чтобы выполнить только ./something, и ваше приложение начнет работать без указания python спереди, а также этого, чтобы он не устанавливался глобально. Самый простой способ - разместить сценарий оболочки, который запустит ваш пакет.