如何使用 setup.py 的命令单击设置 python 代码?

Ale*_*lex 0 python click setup.py python-3.x

我希望能够安装一些 python 代码,使用 python-click 和命令,使用setup.py. 我有以下完整代码:

import click

@click.group()
@click.option(
    "-v",
    "--verbose",
    count=True,
    default=0,
    help="-v for DEBUG",
)
def cli(verbose):
    print(verbose)

@cli.command("list")
@click.option(
    "--option1"
)
def my_list_command(option1):
    print(option1)


@cli.command("find")
@click.option(
    "--option2"
)
def my_find_command(option2):
     print(option2)


if __name__ == '__main__':
   cli()
Run Code Online (Sandbox Code Playgroud)

它定义了两个命令listfind。例如,当我按照mycode.py我的方式保存该文件时

python mycode.py list --option1 opt1
python mycode.py find --option2 opt2
Run Code Online (Sandbox Code Playgroud)

并且代码按预期工作,即我有两个带有选项的命令。

但是,当我现在尝试安装此代码setup.py如下

from setuptools import setup, find_packages
setup(
    name='MyCode',
    install_requires=[
        'click',
    ],
    entry_points={
        'console_scripts': [
            'mytest=mycode.cli'
        ],
    },
)
Run Code Online (Sandbox Code Playgroud)

我收到错误

ERROR: For req: MyCode==0.0.1. Invalid script entry point: <ExportEntry mytest = mycode.cli:None []> - A callable suffix is required. Cf https://packaging.python.org/specifications/entry-points/#use-for-scripts for more information.
Run Code Online (Sandbox Code Playgroud)

如何正确设置多命令 python-click 代码,以便我可以像上面的例子一样使用它?

kma*_*ork 6

你快到了,只需更改mycode.climycode:cli

指定入口点时,模块路径用 分隔.,入口点调用的函数在后面,前缀为:,例如package.module:function

有关更多信息,请参阅文档