【发布时间】:2012-05-25 17:43:46
【问题描述】:
我有一个类似这样的项目结构...
/some_app
build/
README
out.py
some_app/
__init__.py
mod1.py
mod2.py
现在我想将some_app 包导入mod2,而不是搞乱sys.path 的诡计。我所做的只是......
# mod2.py
import some_app
现在当我从命令行运行 mod2.py 时
some_app $ python mod2.py
它抛出错误ImportError: No module named some_app
但是,在out.py 文件中,当我这样做时
# out.py
import some_app.mod2
然后做
some_app $ python out.py
完美运行。
因此,正在发生的事情是这样的。我在同一个包中的模块中加载一个包,然后将该模块作为__main__ 文件运行——它不起作用。接下来,我在另一个模块中加载相同的模块(我以__main__ 运行的那个),然后以__main__ 的身份运行另一个模块——它就可以工作了。
有人可以详细说明这里发生了什么吗?
更新
我知道这样做没有直接的理由——因为我可以直接导入 some_app 包中的任何模块。我尝试这样做的原因是,在 Django 项目中,这就是他们正在做的事情。见this file for example
在每个模块中,所有非标准导入都以django. 开头。所以我想知道他们为什么以及如何这样做。
更新 2
相关链接
【问题讨论】:
-
如果你放一些代码来澄清
__main__这件事会有所帮助。
标签: python