VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

  • 当使用CTRL + F5通过VS Code运行Python测试时,出现错误消息

    ImportError:尝试了相对导入,没有已知的父包

VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

  • 在使用命令行从VS Code终端运行Python测试时

      

    python test_HelloWorld.py

    我收到错误消息

    ValueError:尝试相对顶级包进行相对导入

VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

这是项目结构

VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

如何以最少的(代码/项目结构)更改工作来解决主题问题?

TIA!

[更新]

我使用sys.path更正了以下解决方案:

VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

import sys
from pathlib import Path
sys.path[0] = str(Path(sys.path[0]).parent)

但是我想如果不使用某些(VS Code)设置或运行上下文/环境设置(文件)的Python进行源代码更正,仍然会有一个更有效的解决方案?

wangzhenhxy 回答:VSCode 1.39.x和Python 3.7.x:“ ImportError:尝试了相对导入,没有已知的父包”-在不调试的情况下启动时(CTRL + F5)

您遇到了两个问题。一种是您正在测试文件的编写目录中运行测试文件,因此Python不知道..代表什么。有两种方法可以解决此问题。

一种方法是采用@lesiak提出的解决方案,方法是将导入更改为from solutions import helloWorldPackage,但要通过运行python tests/test_helloWorld.py来执行测试。这样可以确保您项目的顶层位于Python的搜索路径中,因此它将看到solutions

另一种解决方案是在VS Code中打开一个更高目录的项目(无论该目录包含solutionstests)。不过,您仍然需要更改执行代码的方式,因此,正如我上面建议的那样,您是在顶层执行的。

更好的办法是使用python -m tests.test_helloWorld运行代码,使用Python扩展的Run命令或使用扩展的Test Explorer。所有这些选项应该可以帮助您运行代码(您仍然需要更改导入或在VS Code中打开更高的目录)。

,

请勿使用相对导入。 只需将其更改为

from solutions import helloWorldPackage as hw

更新

我最初在PyCharm中对此进行了测试。 PyCharm具有一个不错的功能-它向PYTHONPATH添加了内容根目录和源根目录(这两个选项都是可配置的)。

通过添加.env文件,您可以在VS Code中达到相同的效果:

PYTHONPATH=.:${PYTHONPATH}

现在,对于通过VS Code启动的每个工具,项目目录都将位于PYTHONPATH中。现在,Ctrl + F5可以正常工作。

本文链接:https://www.f2er.com/3160204.html

大家都在问