我有一个类似这样的项目结构......
/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 项目中,这就是他们正在做的事情。例如看这个文件
在每个模块中,所有非标准导入都以django.
. 所以我想知道他们为什么以及如何这样做。
更新 2
相关链接