Как установить точку входа для консольного скрипта с несколькими группами команд для Python Click? - PullRequest
0 голосов
/ 08 января 2019

Учитывая, что моя библиотека с 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?

Есть много примеров, но они показывают только одну команду для одной точки входа, например Точки входа в setup.py

Но возможно ли настроить консольный сценарий в соответствии со структурой сценария my foobar.py click?

Если нет, как мне реструктурировать команды в 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

1 Ответ

0 голосов
/ 11 января 2019

Чтобы точки входа работали в вашем примере, вам нужно:

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

То, что вам не хватает, это понимание значения:

command_line_name=foobar:cli

[console_scripts]

В command_line_name=foobar:cli есть три вещи:

  1. Имя скрипта из командной строки (command_line_name)
  2. Модуль, в котором расположен обработчик команды click (foobar)
  3. Имя команды / группы щелчка в этом модуле (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 нет НИКАКОГО файла cli.py. [код] из вашего вопроса необходимо сохранить в sacremoses/cli.py, а затем в сочетании с предлагаемыми изменениями в файле setup.py все должно работать нормально.

...