如何将整个click cli模块与setuptools入口点集成

2024-10-02 08:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

spartans/bin/下,我有一个名为clickspartans.pycli模块,如下所示:

import click

@click.group()
def main():
    ...

@main.command()
def hub_push():
    ...

@main.command()
@click.argument('username', type=str, required=False)
@click.argument('password', type=str, required=False)
def hub_clean(username='', password=''):
    ...

@main.command()
@click.argument('force', type=bool, required=False)
def hub_delete(force=False):
    ...

if __name__ == '__main__':  # necessary?
    main()

我正在尝试使用setuptools安装thisspartans包,以便可以从命令行运行以下命令:

$ spartans hub_push
$ spartans hub_clean --username ...
$ spartans hub_delete --force

从技术上说,我是在windows上测试的,但它应该可以像那样在任何东西上运行。但是,我不知道如何使用setuptools获取此模式。你知道吗

如果我只需将目录更改为包含spartans.py的文件夹,单击模块允许我这样使用它:

$ spartans.py hub_push
$ spartans.py hub_clean --username ...
$ spartans.py hub_delete --force

但是如果我想使用entry_points和setuptools,我必须这样做:

...
entry_points={
    "console_scripts": [
        "spartans = spartans.bin.spartans:hub_clean",
        # "spartans = spartans.bin.spartans",  # module not callable!
    ]
},

因为模块本身是不可调用的,所以我不知道如何创建上面想要的模式。看来我得满足于这样的事情:

$ spartans-hub_push
$ spartans-hub_clean --username ...
$ spartans-hub_delete --force

我将特定命令连接到模块。但这不可能是对的。我查看了文档,但它仍然只调用一个特定函数:http://click.palletsprojects.com/en/5.x/setuptools/

如何让setuptools调用clickcli包?你知道吗


Tags: 模块pycleanfalsebinmaindefusername

热门问题