1

如果我有一个用 Python 编写的命令行程序(特别是使用我认为使用 argparse 的docopt),并且我想运行它my-program command1 args而不是python my-program.py command1 args,我该怎么办?目前,这适用于基于 Debian 的操作系统(例如 Ubuntu)。

我通常把我的模块做成一个包,所以我已经有了setup.py,但这并没有给我一个免费的命令。

谢谢!


编辑

@pyrospade 在下面给出了一个非常好的链接。我将分享我的结果。

假设我们有

top-level-directory
    setup.py
    package/
         __init__.py
         cli.py

scripts=['package/cli.py']如果你想cli.py在 shell中访问,你可以使用。

如果你想运行 as my-cli,你可以使用

entry_points={
    'console_scripts':
        ['my-cli=package.cli:main']
}

由于我使用docopt,我有这个

def dispatcher(...)
def fun1(....)


def main():    
    arguments = docopt(COMMAND, version="xxxx")
    dispatcher(arguments)

if __name__ == '__main__':
    main()

您甚至可以__init__.py['my-cli=package:main'],但同样,您需要一个名为 的函数main()。但是你可以随意命名它。只是说。

4

2 回答 2

2

确保您的程序在顶部有一个shebang 行:

#!/usr/bin/python

使文件可执行:

chmod a+x my-program.py

使用所需的命令名称创建链接:

ln -s my-program.py /usr/local/bin/my-program
于 2013-02-19T05:36:30.460 回答
0

添加 shebang (#!) 并使其可执行。

#! /usr/bin/python

这里查看更多信息。

于 2013-02-19T05:37:36.257 回答