【问题标题】:Imports break VSCode testing with pytest使用 pytest 导入会破坏 VSCode 测试
【发布时间】:2019-12-07 23:32:07
【问题描述】:

我有一个项目,我想通过 VS Code 发现测试和其他测试功能来简化测试。当我尝试发现测试时,我遇到了一个问题,即测试文件中的导入中断。

我的文件结构是这样的:

project\
  __init__.py
  package1\
    module1.py
    __init__.py
  tests\
    test.py
    __init__.py

在 test.py 我有一行:

import project.package1.module1 as module1

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

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

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

【问题讨论】:

  • 如果它在调试窗格中工作,它应该可以工作:您是否在launch.json(调试窗格中的齿轮图标)中设置了"name": "Python: Module", 配置?您是否设置了正确的解释器?
  • 我确实有一个条目 ``` { "name": "Python: Module", "type": "python", "request": "launch", "module": "enter- your-module-name-here", "console": "integratedTerminal" }, ``` 在 launch.json 中,我确信解释器是正确的。我正在使用 venv 虚拟环境。
  • 好吧,launch.json 设置意味着您无法通过按 F5 键或绿色播放按钮来调试/运行。将 enter-your-module-name-here 更改为 project,保存 json 即可。
  • 我认为这与我导入的方式有关。我正在使用绝对进口,这使得工作的东西很好地工作。问题是我想避免像编辑sys.path 这样的骇人听闻的方法。我不是 Python 专家,导入系统很复杂
  • @Dan 我假设import os; print(os.getcwd()) 打印出'/home/dan/Documents/.../Project'''。你在Project/ 中没有__init__.py 是吗?众所周知,这会使事情变得混乱。我们还在下一个版本中修复了一些测试发现,您可以通过扩展的installing the development build 进行测试。否则,您需要在 github.com/microsoft/vscode-python 上打开一个问题。

标签: python visual-studio-code pytest python-import


【解决方案1】:

我遇到了同样的问题。对我有用的解决方案是引入一个 .envfile,其中包含我的 PYTHONPATH 条目,相对于我的工作区文件夹。

PYTHONPATH="path1:path2:pathN"

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

// ...
"python.envFile": "${workspaceFolder}/.env",
// ...

【讨论】:

  • .env 是默认值,因此您可能不需要显式定义它。
【解决方案2】:

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

import sys
sys.path.insert(0, '/full/path/to/package1/')
from package1.module1 import module1

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

【讨论】:

  • 我在 test 文件夹的 init.py 文件中添加了这些行。这样,在发现测试时,package1 的路径将添加到 sys.path。不是最好的解决方案,但为我解决了问题
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 2015-01-08
  • 2017-02-04
  • 1970-01-01
  • 2019-09-14
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多