如何将 Python 程序转换为 CLI,而无需键入 python3 来执行?

Jam*_*lch 2 python command-line-interface python-3.x docker

而不是打字

$ python3 Program.py -<flags> arguments, etc
Run Code Online (Sandbox Code Playgroud)

我希望能够 DL git 克隆,然后能够输入

$ Program -<flags> arguments, etc 
# program name without the .py extension
Run Code Online (Sandbox Code Playgroud)

我见过其他程序有 .yaml 文件、req.txt 文件并对它们进行了 docker 化,但我找不到任何可以显示如何执行此操作的内容。所有教程和指南都没有提及如何使它们成为简单的命令行程序。

我已经完成了所有 argparse 等,但我正在寻找如何对其进行 dockerize 并简单地运行它而无需导航到 dest 文件夹的指南或一些说明

jfa*_*oni 5

如果您正在考虑分发该程序,您可能应该在包文件中添加 CLI 入口点setup.py

例如:

项目结构

ROOT/
- setup.py
- src/
    - program.py
Run Code Online (Sandbox Code Playgroud)

src/program.py

# program.py

def main():
    pass
Run Code Online (Sandbox Code Playgroud)

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'
        ]
    }
)
Run Code Online (Sandbox Code Playgroud)

重要的一点是 line 'Program=src.program:main':它将名称Program(从命令行调用的名称)与main的函数相关联src/program.py

请注意,该名称可以是任何名称 - 它不一定需要与您的包名称、python 文件名等相关。

您可以执行软件包的本地安装来测试这一点。

ROOT目录中,键入$ pip install -e .然后,键入

$ Program
Run Code Online (Sandbox Code Playgroud)

在任何目录的终端中都将main执行src/program.py.

pip install如果任何人通过 PyPI 而不是您的本地安装来获取您的包,此行为是相同的。