从命令行调用顶级python 包时是否可以执行操作?
例如,我目前的结构如下所示:
MyApp
| - subdir1
| - pyfile.py
| - pyfile.py
| - pyfile.py
| - subdir2
| - subsubdir1
| - pyfile.py
| - pyfile.py
- __init__
- other.py
我可以做所有正常的事情。例如from MyApp.subdir1 import pyfile
。
但是,我想允许用户通过命令行中的顶级名称调用应用程序并让它执行某些操作
python MyApp [options]
而不是他们必须将其范围扩展到具有main()
func
python /path/to/MyApp/actions/somemodule.py [options]
这一切都可能吗?
答案 0 :(得分:4)
尝试python -m MyApp [options]
,__init__.py
包含if __name__ == "__main__":
块。
如果您希望让用户更轻松,请使其setup.py
脚本安装一个仅包含以下内容的命令(例如/usr/bin/MyApp
):
#!/bin/bash
python -m MyApp $@
这样,他们甚至不必知道它是一个Python程序。他们所要做的只是致电MyApp [options]
。
Setuptools甚至可以自动生成,它被称为“入口点”。有关其工作原理的详细信息,请参阅此问题:Explain Python entry points?