Python导入错误-运行unittest

时间:2018-07-17 08:35:31

标签: python python-3.x unit-testing testing runtime-error

为什么我的项目中的模块出现导入错误。所有软件包都在项目下,它们都具有__init __.py,其他脚本没有给出相同的错误。 Python版本是3.6。代码是在Unix环境下编写的。

这是我收到的导入错误。我正在尝试在这里进行测试。

Ran 1 test in 0.001s

FAILED (errors=1)

Error
Traceback (most recent call last):
  File "/usr/lib/python3.6/unittest/case.py", line 59, in testPartExecutor
    yield
  File "/usr/lib/python3.6/unittest/case.py", line 605, in run
    testMethod()
  File "/usr/lib/python3.6/unittest/loader.py", line 34, in testFailure
    raise self._exception
ImportError: Failed to import test module: test_SMSHandler
Traceback (most recent call last):
  File "/usr/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
  File "/home/sevvalboylu/server/app/api/test_SMSHandler.py", line 11, in <module>
    from middleware.services import Sender
ModuleNotFoundError: No module named 'middleware'

2 个答案:

答案 0 :(得分:0)

好像您在PYTHONPATH中缺少项目的根路径

从文档(Modules - The Module Source Path

  

导入名为垃圾邮件的模块时,解释器首先搜索   具有该名称的内置模块。如果找不到,则进行搜索   在目录给定的目录列表中查找名为spam.py的文件   变量sys.path。 sys.path从以下位置初始化:

     
      
  • 包含输入脚本的目录(或当前目录)   当未指定文件时)。
  •   
  • PYTHONPATH(目录名称列表,语法与shell变量PATH相同)。
  •   
  • 与安装有关的默认设置。
  •   

如果该解决方案不适合您,请发布项目的树以使其更容易发现问题。

答案 1 :(得分:0)

在运行单元测试(具有正确的可导入结构)时,我也遇到了导入错误的类似问题,但是原因和解决方案与上述答案中所述的不同。但这仍然是相关的,可能会对某人有所帮助。

就我而言,我具有这样的结构(目前有__init__.py,为简洁起见,在下面省略):

mypkg
  \-- foo.py
another
tests
  \-- some
        \-- <tests here>
      mypkg  <--- same name as top level module mypkg
        \-- test_a.py

从顶级目录运行时,test_a.py中的mypkg中的模块导入失败:

# test_a.py
from mypkg import foo  # causes ModuleNotFoundError: No module named 'mypkg.foo'

mypkg文件夹下的tests文件夹重命名为其他名称可以解决此问题。