You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在Spyder单元格中运行代码时Python找不到同文件夹下的模块

问题原因

这个问题核心是Spyder运行单元格和运行完整脚本时的默认工作目录不一致,Python导入模块时会优先搜索sys.path中罗列的路径,同目录模块能导入的前提是模块所在目录在sys.path里:

  • 运行完整脚本时,Spyder默认会自动将工作目录切换为当前脚本所在的文件夹,该路径会自动加入sys.path,因此同目录的Run_Simulations、SetUpScenarios可以被正常识别。
  • 单独运行单元格时,Spyder默认沿用IPython控制台的当前工作目录,而非当前编辑脚本的所在目录。如果控制台的工作目录和脚本目录不一致,模块所在路径就不在sys.path中,就会触发模块不存在的报错。
验证方法

在导入单元格的最顶部添加如下代码,单独运行单元格即可确认问题:

import os
import sys
# 打印当前工作目录
print("当前工作目录:", os.getcwd())
# 打印模块搜索路径
print("模块搜索路径:", sys.path)

如果输出的当前工作目录不是你脚本、两个模块文件所在的文件夹,即可确认是该原因导致的报错。

解决方案

永久生效方案

修改Spyder默认配置即可一劳永逸解决:

  1. 打开Spyder顶部菜单栏「工具」-「偏好设置」
  2. 找到「IPython控制台」-「运行」选项卡
  3. 在「运行单元格时的工作目录」分类下,勾选「切换到当前编辑器的文件所在目录」
  4. 保存设置后重启IPython控制台,后续单独运行单元格就会自动切换到脚本所在目录。

临时兼容方案

如果不想修改全局配置,可以在导入单元格开头手动添加模块所在路径到搜索路径:

import os
import sys
# 把当前脚本所在目录加到模块搜索路径最前面
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

如果部分Spyder版本运行单元格时无法识别__file__,可以手动写死模块所在的绝对路径:

import sys
# 替换为你自己的模块所在文件夹的绝对路径
sys.path.insert(0, "C:/xxx/你的脚本所在文件夹路径")

内容的提问来源于stack exchange,提问作者PeterBe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:09:00