如果我有一个实现为目录(即包)的Python模块,它同时具有顶层函数run
和子模块run
,那么我能指望from example import run
始终导入该函数吗?根据我的测试,至少在Linux上的Python2.6和Jython2.5是这样的,但我能指望这一点吗?我试图搜索有关进口优先权的信息,但找不到任何东西。在
背景:
我有一个相当大的包,人们通常从命令行作为工具运行,但有时也以编程方式使用。我希望这两种用法都有一个简单的入口点,并考虑像这样实现它们:
example/__init__.py
:
def run(*args):
print args # real application code belongs here
example/run.py
:
第一个入口点允许用户从Python访问模块,如下所示:
from example import run
run(args)
后一个入口点允许用户使用以下两种方法从命令行执行模块:
python -m example.run args
python path/to/example/run.py args
这两个工作都很好,涵盖了我需要的一切。在真正使用它之前,我想知道这是一种合理的方法,我可以期望在所有操作系统上使用所有Python实现。在
我认为这应该一直有效;函数定义将隐藏模块。在
然而,这也让我觉得这是一次肮脏的黑客攻击。干净的方法是
即,最小的
^{pr2}$__init__.py
,所有运行逻辑都在run.py
中:相关问题 更多 >
编程相关推荐