Databricks工作区合并问题:Python文件自动转为Notebook
我有一个Databricks Notebook,依赖代码仓库中的Python字典文件实现功能。通过Azure DevOps CI/CD流水线将代码合并到Databricks工作区后,发现仅包含字典的.py文件被自动转换成了Databricks Notebook,而非保留为纯Python文件,导致Notebook无法正常导入这些字典。
临时解决方法是手动在工作区创建_global_dicts.py,编辑后能正常运行,但CI/CD部署的.py文件还是会被转成Notebook,比如部署test.py后依然出现这个问题。导入代码示例:
from global_dicts import _transactionTypes from global_dicts import _methods from global_dicts import _statuses from global_dicts import _resources from global_dicts import _endDeviceType from global_dicts import _readingQuality
1. 确认工作区非Notebook文件支持配置
请管理员检查Databricks工作区设置:
- 进入管理控制台 → 工作区设置
- 确保「启用非Notebook文件支持」选项已勾选
- 若已开启,尝试重启工作区相关服务(部分环境需要)
2. 调整CI/CD部署路径与方式
方式一:上传到DBFS替代工作区目录
通过Azure DevOps脚本使用Databricks CLI将.py文件上传到DBFS的脚本目录,比如dbfs:/FileStore/scripts/:
databricks fs cp ./global_dicts.py dbfs:/FileStore/scripts/global_dicts.py --overwrite
然后在Notebook中添加DBFS路径到sys.path后再导入:
import sys sys.path.append("/dbfs/FileStore/scripts/") from global_dicts import _transactionTypes, _methods, _statuses, _resources, _endDeviceType, _readingQuality
方式二:使用Databricks Repos关联代码仓库
将你的代码仓库直接关联到Databricks Repos,Repos中的.py文件会保持纯Python文件格式,Notebook可以直接用相对路径导入,无需担心转换问题。
3. 在.py文件中添加防转换标记
在.py文件开头添加以下注释,告知Databricks这是纯Python文件,不要转换为Notebook:
# Databricks notebook source # MAGIC %md # MAGIC <ignore> # MAGIC </ignore>
这个标记会让Databricks跳过Notebook转换流程,保留文件的Python格式。
4. 修正CI/CD部署命令参数
如果使用Databricks CLI的workspace import命令部署文件,需要指定--format SOURCE参数明确这是纯Python源文件:
databricks workspace import --format SOURCE --language PYTHON ./global_dicts.py /Workspace/your-target-path/global_dicts.py --overwrite
如果用Azure DevOps的Databricks任务,确保任务配置中选择了正确的文件类型,或者改用自定义脚本执行上述CLI命令。
内容的提问来源于stack exchange,提问作者Sai Pavan

