PyCharm 调试器中的“测试”包中的绝对导入失败并出现 ModuleNotFoundError

Posted

技术标签:

【中文标题】PyCharm 调试器中的“测试”包中的绝对导入失败并出现 ModuleNotFoundError【英文标题】:Absolute imports from "tests" package fails with ModuleNotFoundError in PyCharm debugger 【发布时间】:2021-03-26 13:39:57 【问题描述】:

鉴于以下简单的 Python 项目,

$ tree
.
├── Pipfile
├── Pipfile.lock
├── src
└── tests
    ├── test_foo.py
    └── util.py

$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
ipython = "*"
pytest = "*"

[dev-packages]

[requires]
python_version = "3.9"

$ cat tests/util.py 
FOO = 5

$ cat tests/test_foo.py 
from tests.util import FOO


def test_foo():
    assert FOO == 5

test_foo 上使用pytest 和适当的pipenv --venv 运行PyCharm 调试器会产生以下错误:

Connected to pydev debugger (build 202.8194.15)
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'tests.util'

【问题讨论】:

【参考方案1】:

test_foo.py 中,如果你打印出sys.path,你会注意到PyCharm 注入了&lt;path_to_venv&gt;/lib/python&lt;version&gt;/site-packages/IPython/extensions,它恰好包含一个tests 模块,它破坏了本地命名空间tests。此问题已在上游报告:请参阅 https://github.com/ipython/ipython/issues/11592。

目前有两种解决方法:

    将您的 tests 目录重命名为其他名称。 删除&lt;path_to_venv&gt;/lib/python&lt;version&gt;/site-packages/IPython/extensions/tests 文件夹。

【讨论】:

以上是关于PyCharm 调试器中的“测试”包中的绝对导入失败并出现 ModuleNotFoundError的主要内容,如果未能解决你的问题,请参考以下文章

从 PyCharm 社区版中的鼠标右键单击上下文菜单运行/调试 Django 应用程序单元测试?

调试 APK 工作正常,包中的 APKS 工作正常,但发布包不能正常工作

从 Ubuntu 中的 pip install 包中找到源代码

为啥 PyCharm 无法运行单元测试?

android 导入第三方jar包,在程序中导入包中的类无效;

第十七节:模块的导入总结