为什么我的项目中的模块出现导入错误。所有软件包都在项目下,它们都具有__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'
答案 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
文件夹重命名为其他名称可以解决此问题。