Windows 上单击命令行界面修改用法字符串

Modify Usage string on Click command line interface on Windows

我有一个名为 tdsm 的 Python 包,这是我第一次使用 Armin Ronacher 的 Click 包将其转换为命令行界面。我已经在这个目录结构中设置了我的脚本:

我还创建了一个 setup.py 文件:

from setuptools import setup

setup(
    name='tdsm',
    version='0.1',
    py_modules=['tdsm.scripts.data_manager',
                'tdsm.scripts.visuals'],
    include_package_data=True,
    install_requires=[
        'click',
        'numpy',
        'scipy',
        'pandas',
        'wand',
        'matplotlib',
    ],
    entry_points='''
        [console_scripts]
        tdsm=tdsm.main:cli
    ''',
)

pip install --editable . 之后,我开始工作了,直到一个点:

# tdsm --help

现在发出:

Usage: tdsm-script.py [OPTIONS] COMMAND [ARGS]...

  TDSM standard workflow -- typical sequence of commands:

      `init <path>` or `open <path>`: to set up the project or to open
      a new session on an existing project.

      `plot`: framework for setting up plots, display layers, and styling.

Options:

  --help  Show this message and exit.

Commands:

  init     Set up a project from scratch.
  plot     Initialize a plotting session.

注意用法声明说 Usage: tdsm-script.py [OPTIONS] COMMAND [ARGS]... and不是 Usage: tdsm [OPTIONS] COMMAND [ARGS]... 我认为应该如此。因为我希望非程序员也能使用它,所以我不希望用户钻研系统寻找不存在的文件...

仔细阅读文档,我可以看到如何更改帮助文本的各个方面,但不是对 tdsm-script.py 的初始引用。关于我做错了什么的任何指示?

您不是唯一遇到此问题的人。从你的屏幕截图来看,你好像在 Windows,现在是 an open bug with Click

问题是 Click 似乎在自动检测 argv[0] 中的程序名称。请参阅执行此操作的 the code in core.py

上面的错误报告 link 提出了一些绕过这个问题的骇人听闻的方法,包括猴子修补。不幸的是,关于该错误的最后评论是从 7 月 28 日开始的——也许在该线程上提到您也遇到了这个问题。祝你好运。

问题已在 GitHub bug discussion thread by Markus Unterwaditzer 中解决。我在这里复制它以供记录。

只需使用显式 prog_name 参数调用命令(或组,在我的例子中),因此:

import click

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

@cli.command(short_help='Set up a project from scratch.')
def init():
    pass

@cli.command(short_help='Initialise a plotting session.')
def plot():
    pass

cli(prog_name='tdsm')  # Call with explicit `prog_name`

安装包时,报告了正确的用法:

# tdsm --help
Usage: tdsm [OPTIONS] COMMAND [ARGS]...