1. 问题描述(ubuntu20.04、windows、MacOS均可解决)
VScode的python报错 ModuleNotFoundError: No module named ‘v0’
我的工作区文件夹打开的是server,文件相对路径是:
server/v0/train_ddpg.py,其中的部分导入import代码如下,v0是上一级文件夹
from v0.cli import cli_train
from v0.config import config_dict
不想修改代码,因为需要改的地方太多了,而只通过设置vscode来解决。查了很多资料都没解决。
2. 先上答案
只需在Visual Studio Code的setting.json中添加如下代码
"terminal.integrated.env.linux": {
"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"
},
//在工作区寻找模块(ubuntu、linux系统),MacOS上替换为"terminal.integrated.env.osx",Windows上替换为"terminal.integrated.env.windows"
解释说明(抄自chatGPT):
在 Visual Studio Code 的设置中,"terminal.integrated.env.linux"
允许你为在 Linux 系统下的集成终端设置环境变量。这些环境变量会在你打开一个新的终端实例时被应用。
让我们分析这个特定的设置:
-
"terminal.integrated.env.linux"
: 指定这些环境变量设置适用于 Linux 系统。 -
"PYTHONPATH"
: 是一个环境变量,用于 Python 解释器,指定模块查找的额外目录。 -
"${workspaceFolder}"
: 是一个预定义的变量,它会被替换为当前 VSCode 工作区的路径。 -
"${pathSeparator}"
: 是一个预定义的变量,它会被替换为操作系统的路径分隔符。在 Linux 系统中,这个分隔符是:
。 -
"${env:PYTHONPATH}"
: 是一个预定义的变量,它会被替换为当前环境中PYTHONPATH
环境变量的值。如果PYTHONPATH
未设置,这将是一个空字符串。
整体解释:
这个设置将 PYTHONPATH
环境变量设置为包含当前工作区的路径和原始 PYTHONPATH
的值。这样做的目的通常是为了确保 Python 解释器能够在模块查找路径中找到工作区中的模块和包。
例如,如果你的工作区路径是 /path/to/workspace
,并且原始 PYTHONPATH
是 /path/to/some/libs
,那么在这个设置下,新的 PYTHONPATH
将被设置为 /path/to/workspace:/path/to/some/libs
。这意味着 Python 解释器将首先在 /path/to/workspace
目录中查找模块,然后在 /path/to/some/libs
目录中查找。
3. 其他方法:
1) 在工作区文件 .vscode/launch.json 中configurations 列表中添加"env"
"env": {
"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"
}
缺点:运行-启动调试(F5)和以非调试模式运行(ctrl+F5)中可用。但右上角三角形的“运行python文件”和“调试python文件”不可用,因为这俩操作不会考虑 launch.json 中的配置。需将代码的文件夹前缀删掉,即修改为如下才可用,不符合要求:
from cli import cli_train
from config import config_dict
2) “cwd”: “${fileDirname}”
在工作区文件 .vscode/launch.json 中configurations 列表中加入这一行,但我不好用:
"cwd": "${fileDirname}", //这个变量默认设置的是 workspaceFolder,搜的别人说是将它手动改成 fileDirname就可以正常导入模块,记得在上一行末尾加上一个逗号
失败说明(抄自chatGPT):
在 Visual Studio Code 的配置文件中,"cwd": "${fileDirname}"
是一个设置项,用于指定某些操作(例如,运行或调试代码)的当前工作目录(Current Working Directory, cwd)。这里的 ${fileDirname}
是一个预定义的变量,它会被替换为当前打开文件的目录名。
-
"cwd"
: Current Working Directory 的缩写,指的是进程的当前工作目录。在计算机程序中,这通常是文件系统中的一个目录或文件夹,用作执行文件和操作的默认路径或上下文。 -
"${fileDirname}"
: 是一个变量,它在运行或调试时会被替换为当前打开文件的目录路径。例如,如果你正在编辑一个位于/path/to/your/file.py
的文件,${fileDirname}
将被替换为/path/to/your/
。
当 "cwd": "${fileDirname}"
被用在 Visual Studio Code 的配置(例如,在 launch.json
中的调试配置)中时,它告诉 VSCode 在运行或调试代码时使用当前打开文件的目录作为当前工作目录。这对于确保相对路径和模块导入的正确解析非常有用。
例如,如果您在 launch.json
中有以下配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}"
}
]
}
这意味着当您调试一个 Python 文件时,VSCode 将使用该文件所在的目录作为当前工作目录,并运行该文件。
3)“code-runner.fileDirectoryAsCwd”
在setting.json中设置 “code-runner.fileDirectoryAsCwd” ,适用于 Code Runner 扩展。但不管是true还是false均无效,与下一条类似
"code-runner.fileDirectoryAsCwd": false, //true:代码在打开的文件夹下运行;false:始终在打开的工作区根目录下运行。
失败说明(抄自chatGPT):
在 Visual Studio Code 的 Code Runner 扩展中,"code-runner.fileDirectoryAsCwd"
是一个设置项,它决定了代码运行时的工作目录(Current Working Directory, CWD)。
"code-runner.fileDirectoryAsCwd": true
-
当设置为
true
,Code Runner 扩展将使用当前打开文件的目录作为运行代码时的工作目录。例如,如果你在 VSCode 中打开并运行了位于
/path/to/your/code.py
的code.py
文件,那么代码将在/path/to/your/
目录中运行。这意味着所有的文件路径和模块导入都将基于这个目录。
需求和场景:
-
模块导入:如果你的代码文件需要导入同一目录下的其他模块或文件,将此参数设置为
true
可以确保导入路径正确。 -
相对文件路径:如果你的代码使用相对路径来读取或写入文件,将此参数设置为
true
可以确保文件操作基于代码文件所在的目录。 -
多目录项目:在一个包含多个子目录的项目中,如果你希望在每个子目录中分别运行代码文件,将此参数设置为
true
可以确保每个代码文件在其所在目录中运行。
"code-runner.fileDirectoryAsCwd": false
-
当设置为
false
,Code Runner 扩展将使用 VSCode 工作区的根目录作为运行代码时的工作目录。例如,如果你的 VSCode 工作区的根目录是
/path/to/workspace/
,不论你运行哪个文件,代码总是在/path/to/workspace/
目录中运行。这意味着所有的文件路径和模块导入都将基于这个目录。
需求和场景:
-
单一工作目录:如果你的项目结构简单,所有的代码文件都在一个目录中,或者你希望所有的代码文件都在工作区的根目录中运行,将此参数设置为
false
可以简化文件和模块的路径管理。 -
全局模块导入:如果你希望从工作区的根目录导入模块,而不是代码文件所在的目录,将此参数设置为
false
可以确保模块导入的一致性。 -
全局文件操作:如果你希望所有的文件读写操作都基于工作区的根目录,将此参数设置为
false
可以简化文件路径的管理。
总结
这个设置项通常在 settings.json
文件中进行配置,你可以通过在 VSCode 中点击左下角的齿轮图标并选择“设置”来找到它,然后搜索 “Code-runner: File Directory As Cwd” 并选择你想要的值。或者,你可以直接在 settings.json
文件中添加或修改这个设置项。
这个设置项对于解决模块导入问题和文件路径问题非常重要,因为 Python 和其他一些语言通常在当前工作目录中查找模块和文件。
选择哪个设置通常取决于你的项目结构和代码的需求。如果你的代码高度依赖于文件和目录的组织结构,使用 "code-runner.fileDirectoryAsCwd": true
可能更合适。如果你的代码主要在一个统一的工作目录中运行,并且文件和模块的路径都是基于这个工作目录的,使用 "code-runner.fileDirectoryAsCwd": false
可能更合适。
4)“python.terminal.executeInFileDir”
在setting.json中设置 “python.terminal.executeInFileDir” ,适用于 Python 扩展。但不管是true还是false均无效,功能与上一条类似
"python.terminal.executeInFileDir": false, //false使用工作区的根目录作为工作目录。true使用当前文件的目录作为工作目录。
失败说明(抄自chatGPT):
在 Visual Studio Code 的 Python 扩展中,"python.terminal.executeInFileDir"
是一个设置项,用于确定当你在终端中运行 Python 文件时的工作目录(Current Working Directory, CWD)。这个设置项的值会影响模块导入、文件路径解析等操作。
"python.terminal.executeInFileDir": true
功能:
当设置为 true
,VSCode 将使用当前打开的 Python 文件所在的目录作为运行该文件时的工作目录。
使用场景:
-
模块导入:如果你的 Python 文件需要导入同一目录下的其他模块或文件,将此参数设置为
true
可以确保导入路径正确。 -
相对文件路径:如果你的 Python 代码使用相对路径来读取或写入文件,将此参数设置为
true
可以确保文件操作基于代码文件所在的目录。 -
多目录项目:在一个包含多个子目录的项目中,如果你希望在每个子目录中分别运行 Python 文件,将此参数设置为
true
可以确保每个代码文件在其所在目录中运行。
"python.terminal.executeInFileDir": false
功能:
当设置为 false
,VSCode 将使用工作区的根目录作为运行 Python 文件时的工作目录,而不是文件所在的目录。
使用场景:
-
单一工作目录:如果你的项目结构简单,所有的 Python 文件都在一个目录中,或者你希望所有的 Python 文件都在工作区的根目录中运行,将此参数设置为
false
可以简化文件和模块的路径管理。 -
全局模块导入:如果你希望从工作区的根目录导入模块,而不是 Python 文件所在的目录,将此参数设置为
false
可以确保模块导入的一致性。 -
全局文件操作:如果你希望所有的文件读写操作都基于工作区的根目录,将此参数设置为
false
可以简化文件路径的管理。
总结文章来源:https://www.toymoban.com/news/detail-762755.html
选择哪个设置通常取决于你的项目结构和代码的需求。如果你的代码高度依赖于文件和目录的组织结构,使用 "python.terminal.executeInFileDir": true
可能更合适。如果你的代码主要在一个统一的工作目录中运行,并且文件和模块的路径都是基于这个工作目录的,使用 "python.terminal.executeInFileDir": false
可能更合适。文章来源地址https://www.toymoban.com/news/detail-762755.html
到了这里,关于VScode import导入自己的模块文件路径错误ModuleNotFoundError: No module named ‘v0‘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!