Snowflake Python工作表导入Office365-REST-Python-Client失败求助
解决Snowflake Python工作表导入Office365-REST-Python-Client包的问题
你的问题核心出在包的打包方式错误,以及导入逻辑不符合Snowflake自定义包的加载要求,以下是修正后的完整流程:
一、重新正确打包Office365模块
- 下载包的wheel文件:
pip download Office365-REST-Python-client - 解压下载的wheel文件(替换为你实际下载的文件名):
unzip office365_rest_python_client-2.5.11-py3-none-any.whl - 只保留解压后得到的
office365目录,将这个目录直接打包为zip文件(比如命名为office365.zip)——确保zip根目录就是office365文件夹,不要嵌套其他层级。
二、上传并加载包
- 将新打包的
office365.zip上传到Snowflake Stage; - 在Python工作表的包菜单中加载该zip文件(确认加载成功)。
三、修正工作表代码
你之前的代码有两个关键问题:一是添加sys.path的逻辑需要调整,二是导入的是zip文件名而非实际模块名。修正后的代码如下:
import sys import snowflake.snowpark as sp import snowflake.snowpark.functions as sff def main(session): # 启用自定义包支持 session.custom_packages_usage_config = {"enabled": True} # 获取Snowflake的导入目录 import_dir = sys._xoptions.get("snowflake_import_directory") # 将zip文件的完整路径添加到sys.path sys.path.append(f"{import_dir}office365.zip") # 导入实际的模块(和本地环境用法一致) from office365.sharepoint.client_context import ClientContext # 测试代码(可替换为你的业务逻辑) dataframe = session.table('information_schema.packages') \ .filter(sff.col("language") == 'python') \ .filter(sff.col("runtime_version") == '3.11') return dataframe
关键说明
- 不要将wheel文件直接打包成zip,Python无法从wheel文件中直接加载模块,必须提取出实际的模块目录再打包;
- 导入时使用模块本身的名称(
office365.sharepoint.client_context),而非zip文件名; snowflake_import_directory指向的是你加载的包所在的stage路径,确保拼接的zip文件名和你上传的完全一致。
内容的提问来源于stack exchange,提问作者Simon Norton
相关产品推荐
相关产品推荐

