无法从相对路径导入模块

时间:2016-10-19 08:24:51

标签: python import module

我在使用Python从相对路径导入模块时遇到问题。我尝试了我在网上找到的所有内容。这是我的目录结构:

starcipher/
    __init__.py
    caesar.py
    tests/
        __init__.py
        test_caesar.py

正如您所知,tests/目录包含我的所有单元测试。 test_caesar.py使用caesar.py中定义的类。这是我的文件:

caesar.py

class Caesar:
    # Blabla

tests/test_caesar.py

import unittest
from ..caesar import Caesar

# I also tried:
from caesar import Caesar
from starcipher.caesar import Caesar
from . import Caesar
from .. import Caesar

# Nothing works.

class TestCaesar(unittest.TestCase):
   # Blabla

我每次都有这个错误:

Traceback (most recent call last):
  File "test_caesar.py", line 2, in <module>
    from ..caesar import Caesar
SystemError: Parent module '' not loaded, cannot perform relative import

修改

以下是我运行单元测试的方法:

  • 在根目录中:python -m unittest discover tests/
  • 或在tests/目录中:python test_caesar.py
  • 甚至:python -m unittest

感谢Pocin,从__init__.py目录中删除tests/文件解决了这个问题!

谢谢。

1 个答案:

答案 0 :(得分:0)

正好让解决方案清晰可见,修复方法是删除tests/__init__.py文件。

但是我不确定为什么会这样有效,如果有人能提供解释会很棒。