如何配置VS Code的Python REPL,使其自动识别工作区模块以解决ModuleNotFoundError
太懂这种烦躁了——从PyCharm转VS Code,本来觉得这种基础模块导入应该是开箱即用的,结果卡在这里确实闹心。结合你在远程SSH环境下的情况,咱们一步步排查和解决:
你的问题梳理
你在VS Code远程SSH环境里,Python REPL能正确识别当前工作目录,但就是导不了同目录下的src模块;设置了.env里的PYTHONPATH=${workspaceFolder},重启VS Code也没生效,甚至dotenv加载的是VS Code Python扩展自带的.env,不是你项目根目录的文件。临时手动加sys.path能解决,但这肯定不是长久之计。
针对性解决方案
1. 先搞定.env的加载问题(核心症结)
你发现find_dotenv()指向了扩展目录的.env,这说明VS Code没优先加载你项目根目录的配置文件。解决这个:
- 确保你的
.env文件确实在工作区根目录,不要放在子文件夹里。 - 打开VS Code设置(快捷键
Ctrl+,),搜索python.envFile,明确设置为你的项目根目录.env路径:
远程环境下,这种绝对路径配置比默认的自动查找更可靠。"python.envFile": "${workspaceFolder}/.env" - 然后修正
.env里的PYTHONPATH写法,远程环境下可以用绝对路径避免变量解析问题:PYTHONPATH=${workspaceFolder} # 或者直接写远程服务器上的工作区绝对路径,比如: # PYTHONPATH=/home/your-username/your-project-folder
2. 给REPL配置自动启动命令(兜底方案)
如果.env的方式还是不生效,咱们直接让REPL启动时自动把工作区加入Python路径,不用手动敲代码:
- 打开VS Code的
settings.json(通过Ctrl+Shift+P输入Preferences: Open Settings (JSON)打开),添加以下配置:
这段代码会在每次REPL启动时自动执行,相当于帮你自动完成临时 workaround 的操作,一劳永逸。"python.REPL.startupCommands": [ "import sys, os; sys.path.append(os.getcwd())" ]
3. 检查远程环境的Python解释器
确保你在远程SSH窗口里选的Python解释器是正确的——有时候VS Code会默认用系统Python,而不是你创建的虚拟环境。可以通过左下角的Python解释器选择器切换,选好后重启REPL。
4. 解决dotenv手动加载失败的问题
如果需要手动测试.env加载,不要只调用load_dotenv(),而是明确指定文件路径,避免找错位置:
from dotenv import load_dotenv import os # 明确指向项目根目录的.env load_dotenv(os.path.join(os.getcwd(), '.env'))
为什么之前的方法没生效?
远程SSH环境下,VS Code的环境变量加载逻辑和本地略有不同:默认情况下,.env的自动查找可能因为远程会话上下文的问题,优先找到扩展目录里的文件,而不是你项目里的。所以明确指定python.envFile路径是关键。
另外,PyCharm会自动把项目根目录加入Python路径,但VS Code更偏向灵活配置,所以需要咱们手动补上这个基础设置,搞定之后就是开箱即用的状态了。
备注:内容来源于stack exchange,提问作者algebruh

