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

跨文件夹导入函数库至Python脚本失败(Jupyter可正常运行)

解决Python跨路径模块导入问题

针对你的仓库结构:

repo_root/
├── data/
└── src/
    ├── myutils.py
    └── model_scripts/
        └── model.py

以下是两种不依赖控制台启动路径的导入方案,推荐第一种:

方案一:自动添加仓库根目录到模块搜索路径(推荐)

这种方法不受启动路径影响,跨系统通用,步骤如下:

  1. 在src目录下创建一个空的__init__.py文件,让Python将src识别为一个可导入的包。
  2. 在model.py的开头添加以下代码:
import sys
from pathlib import Path

# 获取当前脚本的绝对路径
script_path = Path(__file__).resolve()
# 定位到仓库根目录(从model.py文件往上两级父目录)
repo_root = script_path.parents[2]
# 将仓库根目录添加到Python的模块搜索路径
sys.path.append(str(repo_root))

# 现在可以直接用绝对导入
from src.myutils import data_load

不管你在repo_root下执行python src/model_scripts/model.py,还是在repo_root/src下执行python model_scripts/model.py,都能成功导入data_load函数。

方案二:使用相对导入(需按模块方式运行)

如果你不想修改模块搜索路径,可以用相对导入,但必须以模块方式启动脚本:

  1. 同样需要在src目录下创建空的__init__.py文件。
  2. 在model.py中使用相对导入:
from ..myutils import data_load
  1. 必须从仓库根目录执行以下命令启动脚本:
python -m src.model_scripts.model

注意:这种方式不能直接运行model.py(比如python src/model_scripts/model.py),否则会触发相对导入错误——直接运行的脚本会被视为顶层模块,无法使用相对导入语法。

为什么之前的os.chdir方法不可靠?

os.chdir仅改变当前工作目录,但Python的模块搜索路径(sys.path)在脚本启动时就已确定。虽然sys.path中的空字符串对应当前工作目录,但这种方式依赖启动路径和目录切换顺序,容易出现跨路径或跨系统的兼容性问题,不如直接修改sys.path稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:28