запуск сценария python в командной строке из любого каталога - PullRequest
0 голосов
/ 29 апреля 2020

заранее извиняюсь за наивный вопрос! Я тут немного покопался и все еще чувствую себя немного сбитым с толку.

У меня есть скрипт python, который я хотел бы сделать исполняемым из любой точки оболочки bash (например, как * 1003). *, homebrew, neofetch и т. Д. 1016 *. Я использовал pyinstall для создания исполняемого файла, но я не совсем знаю, что с этим делать. я попытался переместить папку сборки в usr/local и поместить псевдоним для исполняемого файла в usr/local/bin, но я получил ошибку «невозможно выполнить двоичный файл» при попытке запуска из оболочки. я попробовал это после ссылки на псевдоним 'git' в urs/local/bin и, увидев, что он направлен на исполняемый файл в usr/local.

, кто-нибудь знает какие-либо предложения или знает о каких-либо хороших ресурсах чтобы попытаться понять, что я делаю не так? Большое спасибо!

1 Ответ

1 голос
/ 29 апреля 2020

Для простого сценария самый простой способ сделать его исполняемым - просто добавить Python строку Шебанга , сохранить сценарий в каталоге, который находится на вашем PATH (например, /usr/local/bin) и установите исполняемый бит в сценарии.

Например,

#!/usr/bin/python3
import sys
print('Hello, world! I am Python', sys.version)

, сохраненный как /usr/local/bin/python-hello, за которым следует chmod u+x /usr/local/bin/python-hello, позволит вам выполнить python-hello из любого места .

Более сложные сценарии лучше всего сделать исполняемыми, если правильно их упаковать с правильной console_scripts точкой входа - хотя что-то, упакованное с помощью PyInstaller, также будет работать, хотя это было бы намного тяжелее.

EDIT

Сценарий с несколькими модулями должен быть организован в пакет, например,

python_hello/
  __init__.py
  __main__.py
  greetings.py

__main__.py может выглядеть как

def main():
    # ...

if __name__ == "__main__":
    main()

Таким образом, вы можете запустить скрипт с python -m python_hello, а также установить python_hello.__main__:main в качестве точки входа консольного скрипта.

...