【发布时间】:2021-09-10 19:00:51
【问题描述】:
这就是我的项目的样子(过于简单):
root/
├── test/
| └── test_code.py
└── code.py
每当我以 root/ 运行 pytest 时,我都会收到 ImportError : Attempted relative import with no known parent package。
如果我将test_code.py 移到根目录/一切正常。但这不是一个选项,因为我有很多模块,这就是为什么我需要将所有测试模块放在一个测试文件夹中进行组织。
我正在使用 VSCode,但奇怪的是:VSCode 在 test_code.py 中找到了我导入的函数。
from ..code import func - 如果我右键单击func,VSCode 会跳到测试文件夹外的code.py。
当我尝试直接在 VSCode 中运行 test_code.py 时,我得到 ValueError:尝试相对导入超出顶级包。
VSCode如何找到我导入的函数却无法运行,pytest也无法运行?
- 我尝试添加
__init__.py来制作root/ 一个包。 - 我已尝试按照here 的说明添加
.env。
解决方案
- 我将
code.py移动到 src/ 并在每个文件夹中添加了__init__.py文件,让 Python 知道 test/ 和 src/ 是包:
root/
├── test/
| ├── __init__.py
| └── test_code.py
└── src/
├── __init__.py
└── code.py
- 我必须在所有文件中使用 absolute 导入:
from folder.file import function。阅读有关绝对与相对导入 here 的信息。如果您在根目录下打开代码 - VSCode 现在会找到您的导入!
这就是 test_code.py 的样子:
from src.code import func
最后,运行 pytest 可以了!如果你想从 terminal 运行code.py,你必须运行:
$ python3 -m src.code
【问题讨论】:
标签: python visual-studio-code import pytest