2015-04-04 93 views
2

从命令行调用顶级python 时是否可以执行操作?使顶层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] 

这是不是可能?

回答

4

尝试python -m MyApp [options],其中您的__init__.py包含if __name__ == "__main__":块。

如果你想,即使对于用户更容易,让您的setup.py脚本安装命令让它(例如/usr/bin/MyApp)只包含以下内容:

#!/bin/bash 
python -m MyApp [email protected] 

这样的话,他们甚至不必须知道这是一个Python程序。他们所要做的就是拨打MyApp [options]

Setuptools甚至可以自动生成它,它被称为“入口点”。有关它们如何工作的更多详细信息,请参阅此问题:Explain Python entry points?