Python导入问题我有

时间:2012-01-10 02:18:58

标签: python

我的目录结构是这样的

main/src/domain/entities.py
-entities.py has some classes
main/tests/test.py
来自test.pt的{​​{1}}中的

测试和域目录都有domain.entities import MyCLass个。

虽然找不到我想要的模块。 我使用__init__.py

运行test.py.

任何想法为什么?

3 个答案:

答案 0 :(得分:3)

是sys.path中的main / src吗? Python通过搜索sys.path中的目录来解析模块名称。例如“import ../module.py”无效。要解决您的问题,请执行以下操作:在“main / tests / test.py”文件中添加:

import sys, os

sys.path.insert(0, os.path.abspath("../src") )

# Then try 
from domain.entries import MyClass 

您还需要确保main / src / domain包含 init .py文件。 另外,你不需要在main / tests中使用 init .py,除非你要将它的父目录添加到你的路径并导入tests.something。

希望这有帮助。

答案 1 :(得分:1)

包中的每个目录都需要__ini__.py

main/__init__.py
main/src/__init__.py
main/src/domain/__init__.py
main/src/domain/entities.py
main/tests/__init__.py

答案 2 :(得分:0)

更容易使用sys.path,但是如果你想要一个不涉及全局变量的解决方案,那么就在这里。

  1. __init__.py文件包含在与要导入的模块相同的文件夹中。
  2. 使用以下语法从所需文件导入所需的特定模块:from path.to.file.filename import MyClass
  3. 我刚才测试了这种特殊的方法。我的文件夹层次结构是一个main.py和两个嵌套文件夹domains/entities除最高级别(即main.py所在级别)之外的每个文件夹中都包含__init__.py个文件。

    画报:

    • main.py
    • project/
      • __init__.py
      • domains/
        • __init__.py
        • entities/
          • __init__.py
          • module1.py