如何为Python Click设置多个命令组的控制台脚本的入口点?

2024-10-03 23:18:12 发布

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

假设我的库foobar.py是这样设置的:

\foobar.py
\foobar
    \__init__.py
\setup.py

控制台脚本中CLI的层次结构:

^{pr2}$

[代码]:

import click

CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])


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

@cli.group(context_settings=CONTEXT_SETTINGS)
def foo():
    pass

@cli.group(context_settings=CONTEXT_SETTINGS)
def bar():
    pass

@foo.command('kungfu')
def kungfu():
    print('bruise lee')

@foo.command('kungpow')
def kungpow():
    print('chosen one')

@bar.command('blacksheep')
def blacksheep():
    print('bah bah blacksheep')

@bar.command('haveyouanywool')
def haveyouanywool():
    print('have you any wool?')

我应该如何在setup.py中设置我的条目?

有很多例子,但它们只显示了一个单一入口点的命令,例如Entry Points in setup.py

但是,是否有可能设置控制台脚本来设置myfoobar.pyclick脚本的结构?

如果不是,我应该如何重组foobar.py中的命令?


对于上下文,我有sacremoses库的脚本:https://github.com/alvations/sacremoses/blob/cli/sacremoses.py

但是我不知道如何配置setup.py来安装圣母玛利亚.py正确编写脚本:https://github.com/alvations/sacremoses/blob/cli/setup.py


Tags: py脚本clisettingsfoodefsetupcontext
1条回答
网友
1楼 · 发布于 2024-10-03 23:18:12

要使入口点在示例中起作用,您需要:

entry_points='''
    [console_scripts]
    command_line_name=foobar:cli
''',

你缺少的是对以下含义的理解:

^{pr2}$

[控制台脚本]

command_line_name=foobar:cli中有三件事:

  1. 命令行中脚本的名称(command_line_name
  2. click命令处理程序所在的模块(foobar
  3. 该模块中单击命令/组的名称(cli

在设置.py

对于您的github示例,我建议:

from distutils.core import setup
import setuptools

console_scripts = """
[console_scripts]
sacremoses=sacremoses.cli:cli
"""

setup(
    name='sacremoses',
    packages=['sacremoses'],
    version='0.0.7',
    description='SacreMoses',
    long_description='LGPL MosesTokenizer in Python',
    author='',
    license='',
    package_data={'sacremoses': [
        'data/perluniprops/*.txt', 
        'data/nonbreaking_prefixes/nonbreaking_prefix.*'
    ]},
    url='https://github.com/alvations/sacremoses',
    keywords=[],
    classifiers=[],
    install_requires=['six', 'click', 'joblib', 'tqdm'],
    entry_points=console_scripts,
)

命令处理程序

在github repo的引用分支中,没有cli.py文件文件。您的问题中的[代码]需要保存在sacremoses/cli.py中,然后与对您的设置.py,一切都会好起来的。在

相关问题 更多 >