Как мне превратить программу Python в CLI без необходимости вводить python3 для выполнения? - PullRequest
0 голосов
/ 03 октября 2019

Вместо того, чтобы вводить

$ python3 Program.py -<flags> arguments, etc

Я хочу иметь возможность DL клонировать git, а затем набрать

$ Program -<flags> arguments, etc 
# program name without the .py extension

Я видел, что другие программы имеют файлы .yaml, req.txt файлы и докеризировать их, но я не могу найти ничего, что показывает мне, как это сделать. Все учебные пособия и руководства не содержат описания того, как сделать их простыми программами командной строки.

Я сделал все argparse и т. Д., Но я ищу руководство или некоторую инструкцию о том, как его докернизировать ипросто запустите его, не переходя в папку dest

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Если вы думаете о распространении программы, вам, вероятно, следует добавить точки входа CLI в файл setup.py вашего пакета.

Например:

Структура проекта

ROOT/
- setup.py
- src/
    - program.py

src/program.py

# program.py

def main():
    pass

setup.py

# setup.py

from setuptools import find_packages, setup

setup(
    name='my_program',
    version='1.0.0',
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'Program=src.program:main'
        ]
    }
)

Важным битом является строка 'Program=src.program:main': она связывает имя Program (имя для вызоваиз командной строки) с функцией main из src/program.py.

Обратите внимание, что это имя может быть любым - оно не обязательно должно быть связано с именем вашего пакета, именами файлов Python и т. д.

Вы можете выполнить локальную установку вашего пакета, чтобы проверить это.

В каталоге ROOT введите $ pip install -e . Затем введите

$ Program

в терминале из любого каталога будет выполнять функцию main из src/program.py.

Это поведение одинаково, если кто-то pip install s использует ваш пакет через PyPI вместо вашего локальногоустановка.

1 голос
/ 03 октября 2019

Добавьте шебанг в начало файла:

#!/bin/python3  # or wherever your python binary is

Если у вас это есть, вы можете сделать:

./Program.py -<flags> arguments etc
...