如何以编程方式将Python文件上传为Databricks共享工作区的工作区文件(避免自动转为笔记本)
如何以编程方式将Python文件上传为Databricks共享工作区的工作区文件(避免自动转为笔记本)
我完全懂你遇到的麻烦——用CLI或REST API传Python文件时,系统自动把它们转成了笔记本,没法当模块导入,可手动在UI里创建的文件却能正常用。其实核心问题就是要明确告诉Databricks:你上传的是源文件,不是笔记本。下面给你两种可行的编程实现方法:
使用Databricks CLI上传
默认情况下,CLI的workspace import命令会自动识别文件类型,把.py文件当成笔记本处理。你只需要加个参数,强制指定它是工作区源文件:
databricks workspace import --format source --language python /本地路径/你的模块.py /Workspace/Shared/目标路径/你的模块.py
--format source:这是关键参数,直接告诉系统要上传的是普通源文件,而非笔记本--language python:指定文件的编程语言为Python- 第一个路径是本地Python文件的绝对/相对路径,第二个是共享工作区里的目标存储路径(注意前缀必须是
/Workspace/Shared/) - 如果需要覆盖已存在的同名文件,再加个
--overwrite参数就行
使用REST API上传
调用Databricks的Workspace Import接口时,同样要在请求里明确标记文件类型,避免被转成笔记本:
第一步:把本地文件内容转成Base64编码
因为API要求文件内容以Base64格式传输,你可以用以下命令生成编码内容:
- Linux/macOS终端:
base64 你的模块.py - Windows PowerShell:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("你的模块.py"))
第二步:发送API请求
用curl的示例如下(记得把<databricks-instance>换成你的Databricks实例地址):
curl -n -X POST https://<databricks-instance>/api/2.0/workspace/import \ -d '{ "path": "/Workspace/Shared/目标路径/你的模块.py", "format": "SOURCE", "language": "PYTHON", "content": "这里替换成刚才生成的Base64编码内容", "overwrite": true }'
format: "SOURCE":和CLI的参数作用一致,标记为工作区源文件overwrite: true:可选参数,允许覆盖已存在的文件- 注意请求要携带正确的认证信息,CLI会自动用本地配置的token,API请求可以通过
-u token:<你的token>添加认证
验证效果
上传完成后,去Databricks工作区看看,目标文件会显示成普通Python文件的图标(不是笔记本图标),这时你就能在Notebook或作业里像普通模块一样导入使用了,比如:
from Shared.目标路径 import 你的模块
备注:内容来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

