Как интегрировать целый модуль кли клика с setuptools entry_points - PullRequest
0 голосов
/ 13 декабря 2018

Под spartans/bin/ У меня есть click cli-модуль с именем spartans.py, который выглядит следующим образом:

import click

@click.group()
def main():
    ...

@main.command()
def hub_push():
    ...

@main.command()
@click.argument('username', type=str, required=False)
@click.argument('password', type=str, required=False)
def hub_clean(username='', password=''):
    ...

@main.command()
@click.argument('force', type=bool, required=False)
def hub_delete(force=False):
    ...

if __name__ == '__main__':  # necessary?
    main()

Я пытаюсь установить этот пакет spartans с помощью setuptools, так что яМожно запустить из командной строки следующие команды:

$ spartans hub_push
$ spartans hub_clean --username ...
$ spartans hub_delete --force

Технически я тестирую на Windows, но он должен быть в состоянии работать так на любом.Однако я не могу понять, как получить этот шаблон с помощью setuptools.

Если я просто перехожу в каталог с папкой, содержащей spartans.py, модуль click позволяет мне использовать его следующим образом:

$ spartans.py hub_push
$ spartans.py hub_clean --username ...
$ spartans.py hub_delete --force

но если я хочу использовать entry_points с setuptools, я должен сделать это так:

...
entry_points={
    "console_scripts": [
        "spartans = spartans.bin.spartans:hub_clean",
        # "spartans = spartans.bin.spartans",  # module not callable!
    ]
},

Поскольку сам модуль не может быть вызван, я не знаю, как создать шаблонЯ хочу выше.кажется, мне придется согласиться на что-то вроде:

$ spartans-hub_push
$ spartans-hub_clean --username ...
$ spartans-hub_delete --force

Где я объединяю конкретную команду с модулем.Но это не может быть правдой.Я посмотрел документацию, но она все еще вызывает только определенную функцию: http://click.palletsprojects.com/en/5.x/setuptools/

Как мне получить setuptools для вызова click cli пакета?

1 Ответ

0 голосов
/ 14 декабря 2018

Должно быть "spartans = spartans.bin.spartans:main", т.е. использовать click.group

...