【问题标题】:Python ImportError and ValueError in VSCode/pytestVSCode/pytest 中的 Python ImportError 和 ValueError
【发布时间】: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

解决方案

  1. 我将code.py移动到 src/ 并在每个文件夹中添加了__init__.py 文件,让 Python 知道 test/ 和 src/ 是包:
root/
├── test/
|   ├── __init__.py
|   └── test_code.py
└── src/
    ├── __init__.py
    └── code.py
  1. 我必须在所有文件中使用 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


    【解决方案1】:

    我建议你这样尝试:

    • root中,创建一个目录src并将code.py移入其中

    • testsrc 目录中创建一个空的__init__.py 文件

    • 在您的 test_code.py 文件中,尝试替换:

      • from ..code import func
      • from src.code import func
    • 确保root 是当前工作目录

    现在,您应该能够从 VS 代码运行脚本,并且从终端运行 pytest . 也应该可以工作。

    【讨论】:

    • 谢谢你,我完全按照你的建议做了。我必须以这种方式导入 VSCode 才能找到所有内容:from ..src.code import func。现在,当我从 VSCode 或通过 pytest 运行时,我得到了同样的错误:ValueError:尝试相对导入超出顶级包。
    • 附加评论:我尝试运行:python3 -m pytest 并得到同样的错误。
    【解决方案2】:

    解决方案

    1. 我将code.py移动到 src/ 并在每个文件夹中添加了__init__.py 文件,让 Python 知道 test/ 和 src/ 是包:
    root/
    ├── test/
    |   ├── __init__.py
    |   └── test_code.py
    └── src/
        ├── __init__.py
        └── code.py
    
    1. 我必须在所有文件中使用 absolute 导入: from folder.file import function。阅读有关绝对与相对导入 here 的信息。如果您在根目录下打开代码 - VSCode 现在会找到您的导入!

    这就是 test_code.py 的样子:

    from src.code import func

    最后,运行 pytest 可以了!如果你想从 terminal 运行code.py,你必须运行: $ python3 -m src.code

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2021-11-27
      • 2020-04-28
      • 2012-12-31
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多