使用 click 自动完成我的 python 模块

问题描述 投票:0回答:1

我创建了一个安装的Python模块。 它使用 Bash CLI 命令,例如

my-module init
my-module delete

结构如下:

my-module/
|--- setup.py
|--- my_module
|    |--- __main__.py
|    |--- delete.py
|    |--- init.py

setup.py

setuptools.setup(
    name="my-module",
    entry_points={
        "console_scripts": [
            "my-module = my_module.__main__:cli"
        ]
    },

__main__.py

@click.group(chain=True)
def cli():
    pass


cli.add_command(init_cmd)
cli.add_command(delete_cmd)

init.py

@click.command("init")
@click.option("-p", "--path",
              type=str,
              help="Path to the project workspace."
              )
def init_project_cmd(path):
    pass

它工作正常,但是自动完成功能不起作用。 它确实适用于

my-module
,但不适用于第二部分。

this之后,我编辑了

.bashrc
,添加了以下行:

eval "$(_ML_PIPELINE_COMPLETE=bash_source /path/to/my-module/my_module/__main__.py)"

但是,(在运行

chmod
__main__.py
后,因为我遇到权限错误)我收到错误消息:

import-im6.q16: unable to open X server `' @ error/import.c/ImportImageCommand/359.
from: can't read /var/mail/my-module.delete
from: can't read /var/mail/my-module.init
/path/to/my-module/my_module/__main__.py: line 9: syntax error near unexpected token `('
/path/to/my-module/my_module/__main__.py: line 9: `from some_module import ('

我的问题:

  1. 我走在正确的轨道上吗?那我还缺少什么呢?这些错误看起来很奇怪,感觉自动补全应该很容易。
  2. 如果是这样,现在我必须(至少)在 bashrc 中添加一行,其中包含主文件的路径(我真的不知道,因为每个用户都有自己的 python 包路径)。我如何自动化此操作,以便使用
    pip install
    命令完成?
python autocomplete
1个回答
0
投票

错误表明系统将您

python script
视为
bash script

它将函数
import
(在您的代码中)视为程序
import
(也可用作
import-im6.q16
),来自包
imagemagick
,用于制作屏幕截图。


您可能必须直接在命令中使用

python

eval "$(_ML_PIPELINE_COMPLETE=bash_source python /path/to/my-module/my_module/__main__.py)"

(而且这个不需要用

chmod


或者您必须在脚本的第一行添加

shebang
#!/usr/bin/env python
- bash 会知道它必须使用
python
来运行此代码。 Linux 不使用扩展名
.py
来识别语言,但它需要 `shebang

#!/usr/bin/env python

# ... code ...

@click.group(chain=True)
def cli():
    pass

cli.add_command(init_cmd)
cli.add_command(delete_cmd)

(而且这个也需要用到

chmod

© www.soinside.com 2019 - 2024. All rights reserved.