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

Databricks Jobs中Python脚本如何从父目录导入模块?

解决Databricks Jobs中Python脚本跨目录导入模块的问题

问题场景

项目目录结构如下:

project
├── config
|   └── utils.py
└── src
    └── module01
        └── file01.py

在file01.py中写了from config.utils import *来导入工具模块,在Databricks Workspace里直接运行这个文件完全正常,但用Workflow的Jobs任务运行时,就会抛出错误:

ImportError: attempted relative import with no known parent package

可行解决方案

方案1:在脚本里手动添加项目根目录到Python路径

直接在file01.py的最开头加上这段代码,把项目根目录加入Python的模块搜索路径:

import sys
from pathlib import Path

# 定位到project目录:当前文件→module01→src→project
project_root = Path(__file__).parent.parent.parent
sys.path.append(str(project_root))

# 现在可以正常导入了
from config.utils import *

这样Python就能找到config模块的位置,不管运行时的工作目录是什么。

方案2:用初始化脚本设置PYTHONPATH

如果不想改脚本代码,可以通过Databricks的初始化脚本设置环境变量:

  1. 在Workspace里创建一个init_script.sh文件,内容如下(替换成你的项目在DBFS的实际路径):
#!/bin/bash
export PYTHONPATH="/dbfs/FileStore/your-project-path/project:$PYTHONPATH"
  1. 编辑Jobs任务的配置,找到「初始化脚本」选项,把这个脚本的路径加进去。
  2. 重新运行任务,Python会自动从设置的路径里找模块。

方案3:把项目打包成可安装模块

如果项目结构复杂,适合用这种方法:

  1. 在project目录下创建setup.py文件,内容示例:
from setuptools import setup, find_packages

setup(
    name="my-project-config",
    version="0.1",
    packages=find_packages(),
)
  1. 在Jobs任务里先执行安装命令:pip install -e /dbfs/FileStore/your-project-path/project
  2. 之后file01.py里的from config.utils import *就能正常导入了。

原因说明

Databricks Jobs运行脚本时的默认工作目录和Workspace里直接运行的不一样,导致Python无法自动识别跨目录的模块结构,调整模块搜索路径就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:36:05