python - 如何将 Python 程序转换为 CLI 而无需键入 python3 来执行?
问题描述
而不是打字
$ python3 Program.py -<flags> arguments, etc
我希望能够 DL git clone 然后能够输入
$ Program -<flags> arguments, etc
# program name without the .py extension
我已经看到其他程序有 .yaml 文件、req.txt 文件并将它们 docker 化,但我找不到任何能告诉我如何做到这一点的东西。所有的教程和指南都没有说明如何使它们成为简单的命令行程序。
我已经完成了所有的 argparse 等,但我正在寻找一个指南或一些关于如何将其 dockerize 并简单地运行它而无需导航到 dest 文件夹的说明
解决方案
如果您正在考虑分发程序,您可能应该在包的setup.py
文件中添加 CLI 入口点。
例如:
项目结构
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 .
Afterwards,键入
$ Program
在终端中的任何目录都将执行main
来自src/program.py
.
pip install
如果有人通过 PyPI 而不是您的本地安装,则此行为是相同的。
推荐阅读
- c++ - 为什么即使它是右值,我也可以在 begin() 上使用赋值运算符?
- ruby - 在 ruby 中,接收 *array 还是在方法内复制和排列更好?
- flutter - 如何更改抽屉的长按文本(颤动)
- python - Django REST API 和 Nuxt.js -(Nuxt 中的 CORS 错误)
- javascript - Firefox 扩展:获取 XHR POST 请求的响应
- javascript - 在 iframe 中导航时保留父 URL
- android - 带有标记的 MPAndroidChart 组合图(条形图和散点图)仅适用于散点图点
- tsql - 将 SQL Server 中的 MASTER 数据库用于数据表
- c - 为什么将 C 字符串作为 char* 传递给函数会导致运行时错误(但传递定义为 char[] 的 C 字符串是可以的)?
- javascript - Javascript原型方法与对象方法