如何为多个Click CLI函数编写entry_points参数?

时间:2018-04-15 05:51:11

标签: python click setuptools

我尝试配置setuptools和Click模块以实现多种功能。

点击Nesting Commands部分中的文档说明以使用click.group()

如何为多个CLick CLI函数编写entry_points?

我正在玩弄他们的语法,我设法得到一些工作,但我无法重新创建它。我是这样的,

entry_points='''
    [console_scripts]
    somefunc=yourscript:somefunc
    morefunc=yourscript:morefunc
'''

按照下面给出的示例,我将语法转换为字典:

entry_points= {'console_scripts': 
        ['somefunc = yourscript:somefunc',
        'morefunc = yourscript:morefunc'
    ]},

重新安装后,调用脚本会引发此错误:

(clickenv) > somefunc          
Traceback (most recent call last):
[...]
    raise TypeError('Attempted to convert a callback into a '
TypeError: Attempted to convert a callback into a command twice.

我第一次完成这项工作的方式是,我安装了脚本,然后通过各种示例逐步更改了代码。有一次,正如文档中所描述的那样,我用$ yourscript somefunc调用了脚本。但是,当我在项目中重新创建模式时,我遇到了错误。

这里我已经卸载并重新安装(即使它被宣传为不必要的,pip install -e .)并删除了第二个入口点。这是我的测试示例。函数morefunc需要.txt输入文件。

# yourscript.py
import click

@click.command()
@click.group()
def cli():
    pass

@cli.command()
def somefunc():
    click.echo('Hello World!')

@cli.command()
@click.argument('input', type=click.File('rb'))
@click.option('--saveas', default='HelloWorld.txt', type=click.File('wb'))
def morefunc(input, saveas):
    while True:
        chunk = input.read(1024)
        if not chunk:
            break
        saveas.write(chunk)

# setup.py
from setuptools import setup
setup(
    name='ClickCLITest',
    version='0.1',
    py_modules=['yourscript'],
    install_requires=[
        'Click',
    ],
    entry_points= {'console_scripts': 
            ['somefunc = yourscript:somefunc']},
 )

1 个答案:

答案 0 :(得分:0)

https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation

setup(
    …
    entry_points={
        'console_scripts': [
            somefunc=yourscript:somefunc
            morefunc=yourscript:morefunc
        ],
    },
…
)