我尝试配置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']},
)
答案 0 :(得分:0)
https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation
setup(
…
entry_points={
'console_scripts': [
somefunc=yourscript:somefunc
morefunc=yourscript:morefunc
],
},
…
)