1. 問題描述(ubuntu20.04、windows、MacOS均可解決)
VScode的python報錯 ModuleNotFoundError: No module named ‘v0’
我的工作區(qū)文件夾打開的是server,文件相對路徑是:
server/v0/train_ddpg.py,其中的部分導(dǎo)入import代碼如下,v0是上一級文件夾
from v0.cli import cli_train
from v0.config import config_dict
不想修改代碼,因為需要改的地方太多了,而只通過設(shè)置vscode來解決。查了很多資料都沒解決。
2. 先上答案
只需在Visual Studio Code的setting.json中添加如下代碼
"terminal.integrated.env.linux": {
"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"
},
//在工作區(qū)尋找模塊(ubuntu、linux系統(tǒng)),MacOS上替換為"terminal.integrated.env.osx",Windows上替換為"terminal.integrated.env.windows"
解釋說明(抄自chatGPT):
在 Visual Studio Code 的設(shè)置中,"terminal.integrated.env.linux"
允許你為在 Linux 系統(tǒng)下的集成終端設(shè)置環(huán)境變量。這些環(huán)境變量會在你打開一個新的終端實例時被應(yīng)用。
讓我們分析這個特定的設(shè)置:
-
"terminal.integrated.env.linux"
: 指定這些環(huán)境變量設(shè)置適用于 Linux 系統(tǒng)。 -
"PYTHONPATH"
: 是一個環(huán)境變量,用于 Python 解釋器,指定模塊查找的額外目錄。 -
"${workspaceFolder}"
: 是一個預(yù)定義的變量,它會被替換為當前 VSCode 工作區(qū)的路徑。 -
"${pathSeparator}"
: 是一個預(yù)定義的變量,它會被替換為操作系統(tǒng)的路徑分隔符。在 Linux 系統(tǒng)中,這個分隔符是:
。 -
"${env:PYTHONPATH}"
: 是一個預(yù)定義的變量,它會被替換為當前環(huán)境中PYTHONPATH
環(huán)境變量的值。如果PYTHONPATH
未設(shè)置,這將是一個空字符串。
整體解釋:
這個設(shè)置將 PYTHONPATH
環(huán)境變量設(shè)置為包含當前工作區(qū)的路徑和原始 PYTHONPATH
的值。這樣做的目的通常是為了確保 Python 解釋器能夠在模塊查找路徑中找到工作區(qū)中的模塊和包。
例如,如果你的工作區(qū)路徑是 /path/to/workspace
,并且原始 PYTHONPATH
是 /path/to/some/libs
,那么在這個設(shè)置下,新的 PYTHONPATH
將被設(shè)置為 /path/to/workspace:/path/to/some/libs
。這意味著 Python 解釋器將首先在 /path/to/workspace
目錄中查找模塊,然后在 /path/to/some/libs
目錄中查找。
3. 其他方法:
1) 在工作區(qū)文件 .vscode/launch.json 中configurations 列表中添加"env"
"env": {
"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"
}
缺點:運行-啟動調(diào)試(F5)和以非調(diào)試模式運行(ctrl+F5)中可用。但右上角三角形的“運行python文件”和“調(diào)試python文件”不可用,因為這倆操作不會考慮 launch.json 中的配置。需將代碼的文件夾前綴刪掉,即修改為如下才可用,不符合要求:
from cli import cli_train
from config import config_dict
2) “cwd”: “${fileDirname}”
在工作區(qū)文件 .vscode/launch.json 中configurations 列表中加入這一行,但我不好用:
"cwd": "${fileDirname}", //這個變量默認設(shè)置的是 workspaceFolder,搜的別人說是將它手動改成 fileDirname就可以正常導(dǎo)入模塊,記得在上一行末尾加上一個逗號
失敗說明(抄自chatGPT):
在 Visual Studio Code 的配置文件中,"cwd": "${fileDirname}"
是一個設(shè)置項,用于指定某些操作(例如,運行或調(diào)試代碼)的當前工作目錄(Current Working Directory, cwd)。這里的 ${fileDirname}
是一個預(yù)定義的變量,它會被替換為當前打開文件的目錄名。
-
"cwd"
: Current Working Directory 的縮寫,指的是進程的當前工作目錄。在計算機程序中,這通常是文件系統(tǒng)中的一個目錄或文件夾,用作執(zhí)行文件和操作的默認路徑或上下文。 -
"${fileDirname}"
: 是一個變量,它在運行或調(diào)試時會被替換為當前打開文件的目錄路徑。例如,如果你正在編輯一個位于/path/to/your/file.py
的文件,${fileDirname}
將被替換為/path/to/your/
。
當 "cwd": "${fileDirname}"
被用在 Visual Studio Code 的配置(例如,在 launch.json
中的調(diào)試配置)中時,它告訴 VSCode 在運行或調(diào)試代碼時使用當前打開文件的目錄作為當前工作目錄。這對于確保相對路徑和模塊導(dǎo)入的正確解析非常有用。
例如,如果您在 launch.json
中有以下配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}"
}
]
}
這意味著當您調(diào)試一個 Python 文件時,VSCode 將使用該文件所在的目錄作為當前工作目錄,并運行該文件。
3)“code-runner.fileDirectoryAsCwd”
在setting.json中設(shè)置 “code-runner.fileDirectoryAsCwd” ,適用于 Code Runner 擴展。但不管是true還是false均無效,與下一條類似
"code-runner.fileDirectoryAsCwd": false, //true:代碼在打開的文件夾下運行;false:始終在打開的工作區(qū)根目錄下運行。
失敗說明(抄自chatGPT):
在 Visual Studio Code 的 Code Runner 擴展中,"code-runner.fileDirectoryAsCwd"
是一個設(shè)置項,它決定了代碼運行時的工作目錄(Current Working Directory, CWD)。
"code-runner.fileDirectoryAsCwd": true
-
當設(shè)置為
true
,Code Runner 擴展將使用當前打開文件的目錄作為運行代碼時的工作目錄。例如,如果你在 VSCode 中打開并運行了位于
/path/to/your/code.py
的code.py
文件,那么代碼將在/path/to/your/
目錄中運行。這意味著所有的文件路徑和模塊導(dǎo)入都將基于這個目錄。
需求和場景:
-
模塊導(dǎo)入:如果你的代碼文件需要導(dǎo)入同一目錄下的其他模塊或文件,將此參數(shù)設(shè)置為
true
可以確保導(dǎo)入路徑正確。 -
相對文件路徑:如果你的代碼使用相對路徑來讀取或?qū)懭胛募瑢⒋藚?shù)設(shè)置為
true
可以確保文件操作基于代碼文件所在的目錄。 -
多目錄項目:在一個包含多個子目錄的項目中,如果你希望在每個子目錄中分別運行代碼文件,將此參數(shù)設(shè)置為
true
可以確保每個代碼文件在其所在目錄中運行。
"code-runner.fileDirectoryAsCwd": false
-
當設(shè)置為
false
,Code Runner 擴展將使用 VSCode 工作區(qū)的根目錄作為運行代碼時的工作目錄。例如,如果你的 VSCode 工作區(qū)的根目錄是
/path/to/workspace/
,不論你運行哪個文件,代碼總是在/path/to/workspace/
目錄中運行。這意味著所有的文件路徑和模塊導(dǎo)入都將基于這個目錄。
需求和場景:
-
單一工作目錄:如果你的項目結(jié)構(gòu)簡單,所有的代碼文件都在一個目錄中,或者你希望所有的代碼文件都在工作區(qū)的根目錄中運行,將此參數(shù)設(shè)置為
false
可以簡化文件和模塊的路徑管理。 -
全局模塊導(dǎo)入:如果你希望從工作區(qū)的根目錄導(dǎo)入模塊,而不是代碼文件所在的目錄,將此參數(shù)設(shè)置為
false
可以確保模塊導(dǎo)入的一致性。 -
全局文件操作:如果你希望所有的文件讀寫操作都基于工作區(qū)的根目錄,將此參數(shù)設(shè)置為
false
可以簡化文件路徑的管理。
總結(jié)
這個設(shè)置項通常在 settings.json
文件中進行配置,你可以通過在 VSCode 中點擊左下角的齒輪圖標并選擇“設(shè)置”來找到它,然后搜索 “Code-runner: File Directory As Cwd” 并選擇你想要的值?;蛘?,你可以直接在 settings.json
文件中添加或修改這個設(shè)置項。
這個設(shè)置項對于解決模塊導(dǎo)入問題和文件路徑問題非常重要,因為 Python 和其他一些語言通常在當前工作目錄中查找模塊和文件。
選擇哪個設(shè)置通常取決于你的項目結(jié)構(gòu)和代碼的需求。如果你的代碼高度依賴于文件和目錄的組織結(jié)構(gòu),使用 "code-runner.fileDirectoryAsCwd": true
可能更合適。如果你的代碼主要在一個統(tǒng)一的工作目錄中運行,并且文件和模塊的路徑都是基于這個工作目錄的,使用 "code-runner.fileDirectoryAsCwd": false
可能更合適。
4)“python.terminal.executeInFileDir”
在setting.json中設(shè)置 “python.terminal.executeInFileDir” ,適用于 Python 擴展。但不管是true還是false均無效,功能與上一條類似
"python.terminal.executeInFileDir": false, //false使用工作區(qū)的根目錄作為工作目錄。true使用當前文件的目錄作為工作目錄。
失敗說明(抄自chatGPT):
在 Visual Studio Code 的 Python 擴展中,"python.terminal.executeInFileDir"
是一個設(shè)置項,用于確定當你在終端中運行 Python 文件時的工作目錄(Current Working Directory, CWD)。這個設(shè)置項的值會影響模塊導(dǎo)入、文件路徑解析等操作。
"python.terminal.executeInFileDir": true
功能:
當設(shè)置為 true
,VSCode 將使用當前打開的 Python 文件所在的目錄作為運行該文件時的工作目錄。
使用場景:
-
模塊導(dǎo)入:如果你的 Python 文件需要導(dǎo)入同一目錄下的其他模塊或文件,將此參數(shù)設(shè)置為
true
可以確保導(dǎo)入路徑正確。 -
相對文件路徑:如果你的 Python 代碼使用相對路徑來讀取或?qū)懭胛募?,將此參?shù)設(shè)置為
true
可以確保文件操作基于代碼文件所在的目錄。 -
多目錄項目:在一個包含多個子目錄的項目中,如果你希望在每個子目錄中分別運行 Python 文件,將此參數(shù)設(shè)置為
true
可以確保每個代碼文件在其所在目錄中運行。
"python.terminal.executeInFileDir": false
功能:
當設(shè)置為 false
,VSCode 將使用工作區(qū)的根目錄作為運行 Python 文件時的工作目錄,而不是文件所在的目錄。
使用場景:
-
單一工作目錄:如果你的項目結(jié)構(gòu)簡單,所有的 Python 文件都在一個目錄中,或者你希望所有的 Python 文件都在工作區(qū)的根目錄中運行,將此參數(shù)設(shè)置為
false
可以簡化文件和模塊的路徑管理。 -
全局模塊導(dǎo)入:如果你希望從工作區(qū)的根目錄導(dǎo)入模塊,而不是 Python 文件所在的目錄,將此參數(shù)設(shè)置為
false
可以確保模塊導(dǎo)入的一致性。 -
全局文件操作:如果你希望所有的文件讀寫操作都基于工作區(qū)的根目錄,將此參數(shù)設(shè)置為
false
可以簡化文件路徑的管理。
總結(jié)文章來源:http://www.zghlxwxcb.cn/news/detail-762755.html
選擇哪個設(shè)置通常取決于你的項目結(jié)構(gòu)和代碼的需求。如果你的代碼高度依賴于文件和目錄的組織結(jié)構(gòu),使用 "python.terminal.executeInFileDir": true
可能更合適。如果你的代碼主要在一個統(tǒng)一的工作目錄中運行,并且文件和模塊的路徑都是基于這個工作目錄的,使用 "python.terminal.executeInFileDir": false
可能更合適。文章來源地址http://www.zghlxwxcb.cn/news/detail-762755.html
到了這里,關(guān)于VScode import導(dǎo)入自己的模塊文件路徑錯誤ModuleNotFoundError: No module named ‘v0‘的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!