阅读了很多stackoverflow帖子后,Python文档并运行了一些测试。我想我已经掌握了导入逻辑在Python中的工作原理。但是,由于我第一次开展了一个非常大的Python项目,我想确认我的理解是正确的(希望这篇文章可以帮助将来的人,因为我个人发现完全理解什么是令人沮丧的继续)
用于参考的项目的一般结构:
`
source/
main.py
test_main.py
__init__.py
Package1/
moduleA.py
moduleB.py
__init__.py
Package2/
moduleC.py
__init__.py
Package3/
moduleD.py
__init__.py
tests/
test_module1.py
test_module2.py
__init__.py
`
有人可以确认以下几点是否正确? (下面我假设我没有在任何文件中手动操作sys.path)
(1)如果我项目的唯一入口点是main.py,那么建议在所有文件中使用绝对导入语句? (即 - 如果moduleA.py需要导入moduleB.py我只有import moduleB
但是如果moduleA.py也需要导入moduleD那么我会把from package3 import moduleD
)这样做会导致没有导入错误吗? (因为sys.path将在源目录中,因此会知道它有子包Package1,Package2,Package3和Test)
(2)直接运行moduleA.py:
source/
,那么上面提到的import语句仍然有用吗? (出于同样的原因,我给了(1))