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

如何为具有多个Python命令组的控制台脚本设置入口点?,python,command-line,console,setuptools,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 [代码]: 如何在setup.py中设

假设我的库带有
foobar.py
,设置如下:

\foobar.py
\foobar
    \__init__.py
\setup.py
控制台脚本中CLI的层次结构:

foobar.py
    \cli
         \foo
             \kungfu
             \kungpow
         \bar
             \blacksheep
             \haveyouanywool
[代码]: 如何在
setup.py
中设置条目?

有许多示例,但它们仅显示单个入口点的单个命令,例如

但是甚至可以用my
foobar.py
click脚本的结构来设置控制台脚本吗?

如果没有,我应该如何重新构造
foobar.py中的命令?


在上下文中,我为
sacremoses
库编写了以下脚本:


但是我不知道如何配置
setup.py
以正确安装sacremoses.py脚本:

要使入口点在示例中正常工作,您需要:

entry_points='''
    [console_scripts]
    command_line_name=foobar:cli
''',
您缺少的是对以下含义的理解:

command_line_name=foobar:cli
[控制台脚本] 在
命令行\u name=foobar:cli中有三件事:

  • 来自命令行的脚本名称(
    命令行名称
  • 单击命令处理程序所在的模块(
    foobar
  • 该模块中单击命令/组的名称(
    cli
  • setup.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文件。您的问题中的[code]需要保存在
    sacremoses/cli.py
    中,然后与建议对setup.py进行的更改相结合,一切都会正常工作。

    我不清楚您为什么需要多个入口点?你想实现什么?我想让用户做一些类似于
    $。/foobar foo kungfu--help
    $。/foobar blacksheep--help
    。感谢回答中的澄清!!
    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,
    )