【问题标题】:Same import, different errors相同的导入,不同的错误
【发布时间】:2021-03-18 19:05:37
【问题描述】:

我正在对我的代码进行测试,但遇到了一个奇怪的导入错误。

注意事项:

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

文件夹结构是这样的:

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

在 category_test 中,我确实使用以下方法导入“Category”类:

from models.category import Category

在语言测试中,我确实使用以下方法导入“语言”类:

from models.language import Language

在 category_test 案例中,一切正常。
在 language_test 案例中,我遇到一个“导入错误”。
它不像在 category_test 文件中那样在项目的根目录中进行搜索,而是在 my_test/unit/models 文件夹中进行搜索。

当我打印 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'
]

我该如何解决这个问题?

编辑
我认为这是一个 linter 问题。是真的吗? 如果我尝试通过指定从根目录 (step1) 的路径来导入模块,然后我从导入路径 (step2) 中删除根目录来恢复导入,它可以工作:
第 1 步

from SteFunBot.models.language import Language

第 2 步

from models.language import Language

【问题讨论】:

  • 模块名为language.py,但导入为from models.languages。这两个名字不一样。
  • 是的,但也修改为“语言”它不起作用。关键是python建议我使用“language_test”模块而不是“language”。我写这篇文章确实犯了一个错误。
  • 请以文本形式包含文本,而不是屏幕截图。 This is what your question looks like with a screenshot
  • 您可以尝试将__init__.py 添加到 root/models 文件夹吗?
  • 我已经这样做了,以便有机会将其添加到导入路径中。问题仍然存在。

标签: python python-3.x visual-studio-code python-import


【解决方案1】:

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

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

    例如:使用

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

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

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

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

【讨论】:

  • PYTHONPATH 环境变量已经设置,正如您从 sys.path 的打印输出中看到的那样,所以这不是问题。我的观点是 VSCode linter 没有得到我认为实际上设置的 pythonpath。
  • 在"launch.json"文件中设置"env": {"PYTHONPATH": "D:\\...\\folder"}后,还是不行吗?跨度>
  • 它在我完成了我在编辑后写的技巧之后才起作用。否则它不会。我认为重点不是环境变量:我确实在操作系统上手动设置了它
猜你喜欢
  • 2021-11-04
  • 2023-03-17
  • 2018-06-12
  • 2019-09-02
  • 1970-01-01
  • 2015-10-01
  • 2021-02-25
  • 2021-02-27
  • 2012-10-28
相关资源
最近更新 更多