使用 pytest 导入会破坏 VSCode 测试

Dan*_*iel 7 python python-import pytest visual-studio-code

我有一个项目,我想在其中使用 VS Code 的发现测试和其他测试功能来简化测试。我有一个问题,当我尝试发现测试时,测试文件中的导入会中断。

我有一个像这样的文件结构:

project\
  __init__.py
  package1\
    module1.py
    __init__.py
  tests\
    test.py
    __init__.py
Run Code Online (Sandbox Code Playgroud)

在 test.py 我有一行:

import project.package1.module1 as module1
Run Code Online (Sandbox Code Playgroud)

我通过python -m project在根文件夹中调用来运行我的项目,并且我能够通过python -m pytest project从根文件夹中调用来成功运行测试。

当我运行 VS Code 的“发现测试”功能或尝试使用调试器单步执行文件时,我收到错误“ModuleNotFoundError: No module named project”。

有谁知道如何解决这个问题?

小智 11

我遇到过同样的问题。对我有用的解决方案是引入一个.env文件来保存我的PYTHONPATH条目,相对于我的工作区文件夹。

PYTHONPATH="path1:path2:pathN"
Run Code Online (Sandbox Code Playgroud)

然后,我在工作区设置中添加了一行,指定文件的位置.env

// ...
"python.envFile": "${workspaceFolder}/.env",
// ...
Run Code Online (Sandbox Code Playgroud)


小智 4

我遇到了同样的问题,我能够在 VSCode 的终端中成功运行,但发现失败pytestpython -m pytest我的解决方案是通过以下方式实现失败的导入

import sys
sys.path.insert(0, '/full/path/to/package1/')
from package1.module1 import module1
Run Code Online (Sandbox Code Playgroud)

请注意,VSCode 是以project根文件夹打开的。

  • 我将这些行添加到测试文件夹的 __init__.py 文件中。这样,当发现测试时,package1 的路径就会添加到 sys.path 中。不是最好的解决方案,但为我解决了问题 (3认同)