我的项目结构大致如下...
/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
相关链接
__main__
的事情,那将会很有帮助。 - Diego Navarro