如果我有一个用Python编写的命令行程序(特别是使用我认为使用argparse的docopt),我希望以my-program command1 args
而不是python my-program.py command1 args
运行它,那么我该怎么办?目前,这适用于基于Debian的操作系统(例如Ubuntu)。
我通常会将我的模块设为一个包,所以我已经拥有setup.py
,但这并没有授予我免费命令。
谢谢!
修改
@prospade给出了一个非常好的链接。我将分享我的结果。假设我们有
top-level-directory
setup.py
package/
__init__.py
cli.py
如果您想在shell中访问scripts=['package/cli.py']
,可以使用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()
您甚至可以通过说__init__.py
将其置于['my-cli=package:main']
之下,但同样需要一个名为main()
的函数。但你可以随意命名。只是说。
答案 0 :(得分:2)
确保您的程序顶部有shebang line:
#!/usr/bin/python
使文件可执行:
chmod a+x my-program.py
使用所需的命令名建立链接:
ln -s my-program.py /usr/local/bin/my-program
答案 1 :(得分:0)