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

标签 python command-line console setuptools python-click

鉴于我的带有 foobar.py 的库是这样设置的:

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

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

foobar.py
    \cli
         \foo
             \kungfu
             \kungpow
         \bar
             \blacksheep
             \haveyouanywool

[代码]:

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

但是是否可以根据我的foobar.py 点击脚本的结构来设置控制台脚本?

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


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

但我不知道如何配置 setup.py 以正确安装 sacremoses.py 脚本:https://github.com/alvations/sacremoses/blob/cli/setup.py

最佳答案

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

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

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

command_line_name=foobar:cli

[控制台脚本]

command_line_name=foobar:cli 中有三件事:

  1. 命令行脚本的名称(command_line_name)
  2. 点击命令处理程序所在的模块(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 存储库的引用分支中,没有 cli.py 文件。您问题中的[code] 需要保存在sacremoses/cli.py 中,然后结合对您的setup.py 的建议更改,一切都会正常进行。

关于python - 如何使用 Python Click 的多个命令组设置控制台脚本的入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087479/

相关文章:

python - 导入错误 : cannot import name . ... 在 python 中

linux - 使用 jar 命令将 war 解压缩到一个目录。这可能吗?

c# - 使控制台不可见的命令参数

swift - 快速上的图像

perl - 如何获取另一个命令行工具 "wrap"的未修改命令行参数?

c++ - 如何在第一次输入后立即停止 C++ 控制台关闭

JavaScript 变量在赋值后显示为未定义

python - Django 模型按人类可读的值进行过滤

python - easy_install 和 apt-get 有什么区别

python - OpenCV VideoCapture 无法在 Python 中读取视频,但可以在 VS11 中读取