我创建了一个安装的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 ('
我的问题:
pip install
命令完成?错误表明系统将您
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
)