【问题标题】:Run a Python made CLI without running the .py file from terminal运行 Python 制作的 CLI,而不从终端运行 .py 文件
【发布时间】:2021-11-13 17:09:23
【问题描述】:

当您在计算机上安装 Git 时,可以使用“git”从终端运行它。同样,Python 也可以只用“python”或“py”运行。

如果我使用 argparse 和 Python 制作 CLI,有没有办法让用户只需键入即可在终端中安装并使用它

$ myCLI -option

而不是

$ python path\to\myCLI.py -option

像我使用/与之交互的所有 CLI 一样吗?

【问题讨论】:

    标签: python terminal command-line-interface argparse


    【解决方案1】:

    粗溶液

    您的脚本只需要在用户的$PATH 中的某个位置(并且如果您不希望他们键入myCLI.py,则不要有扩展名)。此外,它需要以魔术注释 #!/usr/bin/env python3(如果您正在运行 Linux)开头并且是可执行的(在分发之前在 linux chmod +x myCLI 上)。或者,您可以使用所需操作系统的本机 shell 语言(对于 linux 为 sh)创建一个脚本,该脚本调用 python3 /path/to/scriptpython -m module 等。

    如果你在没有 .py 的情况下命名你的主脚本,它会阻止你从其他任何地方导入它,所以通常的方法是有一个“入口点”脚本,它由以下内容组成:

    #!/usr/bin/env python3
    from myApp import main
    main()
    

    (请参阅the PyPa docs 进行讨论)

    更好的解决方案

    当然,您需要在最终用户的$PATH 中的某处部署您的入口点脚本。这可能更有趣,但幸运的是整个事情都由 setuptools 处理,您甚至不需要编写脚本:您只需要一个入口点函数

    使用 console_script 入口点来注册您的脚本接口。然后,您可以让工具链处理将这些接口转换为实际脚本的工作

    official docs

    你只需输入你的setup.py:

    setup(
        entry_points = {
            'console_scripts': [
                'PKG_NAME = package.module:func',
            ],
        }
    )
    

    任何输入PKG_NAME 的人都会有效地运行package.module:func()(所以func 是你上面的入口点main() 函数)。

    请参阅this question,了解这种方法相对于为每个平台编写单独脚本的旧方法的优点。

    请注意,如果您不是将应用程序构建为 python 包,而是使用其他一些打包标准(archlinux PKGBUILD 或 .deb 或其他),您仍然可以采用相同的方法——只需编写入口点脚本如上所述,并让包将其放在用户的$PATH 中的某个位置。

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2011-08-18
      • 2018-07-09
      • 1970-01-01
      • 2016-05-12
      • 2021-04-06
      相关资源
      最近更新 更多