导入逻辑Python项目

时间:2017-08-06 03:10:26

标签: python import package

阅读了很多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))
  • 如果我直接运行它,但当前的工作目录是Package1,那么我会得到导入错误,说无法找到模块/ pacakge Package3正确吗? (因为Package1不知道它有父母,因此无法引用Package3?)

0 个答案:

没有答案