如果我有一个用Python编写的命令行程序(特别是使用docopt,我认为它使用argparse),并且我想将其作为my-program command1 args
而不是python my-program.py command1 args
运行,我该怎么办?目前,这是基于Debian的操作系统(例如Ubuntu)。
我通常会把我的模块作为一个包,所以我已经有了setup.py
,但这并不能给我一个免费的命令。
谢谢!
编辑
@火山铲在下面给出了一个非常好的链接。我将分享我的结果。
假设我们有
top-level-directory
setup.py
package/
__init__.py
cli.py
如果要访问shell中的cli.py
,则可以使用scripts=['package/cli.py']
。
如果你想以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()
您甚至可以通过说['my-cli=package:main']
将其放在__init__.py
下,但同样,您需要一个名为main()
的函数。但你可以随心所欲地命名它。只是说说而已。
确保您的程序顶部有一行shebang:
#!/usr/bin/python
使文件可执行:
chmod a+x my-program.py
使用所需的命令名创建链接:
ln -s my-program.py /usr/local/bin/my-program
添加shebang(#!)并使其可执行。
#! /usr/bin/python
查看此处了解更多信息。