诗歌管理python包CLI
Poetry manage python package CLI
我正在使用具有以下结构的 Poetry 开发一个 Python 包:
/packagename
/packagename
/tests
__init__.py
test_packagename.py
__init__.py
packagename.py
pyproject.toml
所有的包代码都在packagename.py里,在__init__.py
里导入。
我想添加一个 CLI,我的目标是在命令行中执行以下命令:
<packagename> <packagefunction>
为此,我使用了 Python 的点击包,并将我的 <packagefunction>
写在 packagename.py
中:
@click.command()
def packagefunction():
目前,我已将入口点添加到诗歌配置文件中:
[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
和运行:
poetry run <packagefunction>
完美执行。
但是,我知道这不是正确的方法,我希望 CLI 使用上面显示的命令执行。
要实现你后面的命令行,可以使用:
click.Group()
import click
@click.group()
def main():
"""packagename cli"""
然后要使用组,您可以使用 @main.command()
装饰器,例如:
@main.command()
def packagefunction():
"""packagefunction subcommand"""
而不是 @click.command()
装饰器。
Poetry scripts
让诗歌安装 packagename
命令并调用 packagename
模块中的 main
组:
[tool.poetry.scripts]
# command_name = module_for_handler : function_for_handler
<packagename> = '<packagename>:<main>'
而不是:
[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
我正在使用具有以下结构的 Poetry 开发一个 Python 包:
/packagename
/packagename
/tests
__init__.py
test_packagename.py
__init__.py
packagename.py
pyproject.toml
所有的包代码都在packagename.py里,在__init__.py
里导入。
我想添加一个 CLI,我的目标是在命令行中执行以下命令:
<packagename> <packagefunction>
为此,我使用了 Python 的点击包,并将我的 <packagefunction>
写在 packagename.py
中:
@click.command()
def packagefunction():
目前,我已将入口点添加到诗歌配置文件中:
[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
和运行:
poetry run <packagefunction>
完美执行。
但是,我知道这不是正确的方法,我希望 CLI 使用上面显示的命令执行。
要实现你后面的命令行,可以使用:
click.Group()
import click
@click.group()
def main():
"""packagename cli"""
然后要使用组,您可以使用 @main.command()
装饰器,例如:
@main.command()
def packagefunction():
"""packagefunction subcommand"""
而不是 @click.command()
装饰器。
Poetry scripts
让诗歌安装 packagename
命令并调用 packagename
模块中的 main
组:
[tool.poetry.scripts]
# command_name = module_for_handler : function_for_handler
<packagename> = '<packagename>:<main>'
而不是:
[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'