相同的导入,不同的错误

2024-09-30 22:13:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对我的代码进行测试,但我面临一个奇怪的导入错误

注:

  • 我使用的是VSCode版本:1.46.1
  • PYTHONPATH设置为项目的根目录

文件夹结构如下所示:

-app.py
-models
---language.py
---category.py
-my_tests
---unit
------models
---------category_test.py
---------language_test.py

在category_测试中,我使用以下方法导入“category”类:

from models.category import Category

在language_测试中,我使用以下方法导入“language”类:

from models.language import Language

在category_测试用例中,所有操作都正常。
在language_测试用例中,我遇到一个“导入错误”。
它不会像搜索类别测试文件那样在项目的根目录下搜索,而是在“我的测试/单元/模型”文件夹中搜索。 enter image description here

打印sys.path时,结果与预期一致:

[
 '/home/ste3/Documents/Projects/SteFunBot/my_tests/unit/models', -> current folder
 '/home/ste3/Documents/Projects/SteFunBot', -> PYTHONPATH
 '/usr/lib/python38.zip', '/usr/lib/python3.8', 
 '/usr/lib/python3.8/lib-dynload', 
 '/home/ste3/Documents/Projects/SteFunBot/venv/lib/python3.8/site-packages'
]

我怎样才能解决这个问题

编辑
我认为这是一个短绒问题。会吗? 如果我试图通过从根目录指定路径(step1)来导入模块,然后从导入路径(step2)中删除根目录,恢复导入,它会起作用:
步骤1

from SteFunBot.models.language import Language

步骤2

from models.language import Language

Tags: frompyimporthomemodelslibusrlanguage
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:55

在其他文件夹中导入模块(文件)时,默认情况下,VSCode从文件的父文件夹开始。因此,我们可以通过以下方式帮助VSCode找到模块路径:

  1. 使用绝对路径。设置VSCode搜索路径的方法是从当前项目开始。VSCode在执行代码之前首先更改项目文件夹路径

    例如:使用

    "env": {
                    "PYTHONPATH": "${workspaceFolder}",
                }
    

    在“launch.json”中添加项目的绝对路径:

    enter image description here

  2. 使用相对路径。根据文件的相对路径(使用导入的模块文件)查找项目路径,然后VSCode将从项目文件夹开始搜索

    例如:在文件开头使用以下代码查找项目文件夹路径:

    enter image description here

相关问题 更多 >