当从命令行调用顶级 python 包时,是否可以执行操作?
例如,我当前的结构如下所示:
MyApp
| - subdir1
| - pyfile.py
| - pyfile.py
| - pyfile.py
| - subdir2
| - subsubdir1
| - pyfile.py
| - pyfile.py
- __init__
- other.py
我可以做所有正常的事情。例如从 MyApp.subdir1 导入 pyfile
。
但是,我希望允许用户通过命令行的顶级名称调用应用程序并让它执行某些操作
python MyApp [options]
他们不必将其范围限制到具有 main()
函数的特定模块
python /path/to/MyApp/actions/somemodule.py [options]
这有可能吗?
最佳答案
尝试python -m MyApp [options]
,您的__init__.py
在哪里包含 if __name__ == "__main__":
block 。
如果您想让用户更轻松地做到这一点,请使您的setup.py
脚本安装一个仅包含以下内容的命令(例如 /usr/bin/MyApp
):
#!/bin/bash
python -m MyApp $@
这样,他们甚至不必知道这是一个 Python 程序。他们所要做的就是调用 MyApp [options]
.
Setuptools 甚至可以自动生成它,它被称为“入口点”。有关其工作原理的更多详细信息,请参阅此问题:Explain Python entry points?
关于python - 使顶级 python 模块可调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449503/