首页 > 解决方案 > 如何在 vscode 中将目录标记为源?尝试了所有可能的解决方案,没有任何效果

问题描述

我在vscode中有以下结构:

development
    .vscode
        |____settings.json
    src 
      extract
         |___extract.py 
      utils 
         |___ranking.py 
      build
         |__model.py 
      words.txt
      .env 

我希望运行 extract.py 并收到以下错误:

ModuleNotFoundError: No module named 'utils.ranking'

我的一些extract.py看起来像:

import utils.ranking as qr
f = open('../words.txt')

f = f.readlines()

这些是前几行。ranking.py 包含一个函数ranking

现在我知道这段代码就像在 pycharm 中一样工作。唯一的问题是我没有像在 pycharm 中那样将目录标记为源。所以我按照堆栈溢出的步骤并在 src 文件夹下创建了一个 .env 文件,它看起来像:

PYTHONPATH=./src 

然后我编辑 settings.json 使其看起来像:

{
    "python.pythonPath": "/conda/envs/test01/bin/python",
    "python.envFile": "${workspaceFolder}/.env"
}

然后当我运行 extract.py 我仍然得到同样的错误。这是什么原因造成的?我还可以做些什么。vscode 新手!

标签: pythonvisual-studio-codevscode-settingsvscode-tasks

解决方案


你需要这样设置:

  "python.envFile": "${workspaceFolder}/.env",  //not need
  "terminal.integrated.env.windows": {
    "PYTHONPATH": "${workspaceFolder}/src"
  }

您设置的设置仅在调试模式下有效。你可以看看官方文档

PYTHONPATH 可以通过终端设置 ( terminal.integrated.env. *) 和/或在.env 文件中进行设置。

使用终端设置时, PYTHONPATH 会影响用户在终端内运行的任何工具, 以及扩展为通过终端路由的用户执行的任何操作,例如调试。但是,在这种情况下,当扩展程序执行未通过终端路由的操作时,例如使用 linter 或格式化程序,则此设置不会影响模块查找。

当使用 .env 文件设置 PYTHONPATH 时,它将影响扩展程序代表您执行的任何操作以及调试器执行的操作,但不会影响在终端中运行的工具。

如果需要,您可以使用这两种方法设置 PYTHONPATH。


推荐阅读