如何在Snowpark(Snowflake Python工作表)中编程导入自定义Python模块
在Snowpark中编程导入Stage上的Python模块
Snowpark不支持直接用import @my_github_stage.my_module这种语法导入Stage上的模块,你可以通过以下两种方式实现需求:
方法一:会话导入+常规导入(推荐)
利用Snowpark会话的add_import方法将Stage文件加载到运行环境,再调整Python路径完成导入:
import snowflake.snowpark as snowpark import sys def main(session: snowpark.Session): # 把Stage上的模块添加到会话导入列表 session.add_import("@my_github_stage/my_module.py") # 获取Snowflake存放导入文件的临时目录,添加到sys.path import_dir = sys._xoptions.get("snowflake_import_directory") if import_dir: sys.path.append(import_dir) # 正常导入模块 import my_module print(my_module.MY_CONSTANT) return my_module.MY_CONSTANT
方法二:动态加载模块
如果需要更灵活的控制,可使用importlib直接从Stage文件加载模块:
import snowflake.snowpark as snowpark import importlib.machinery def main(session: snowpark.Session): # 将Stage文件下载到本地临时路径 session.file.get("@my_github_stage/my_module.py", "/tmp/") # 加载模块 loader = importlib.machinery.SourceFileLoader("my_module", "/tmp/my_module.py") my_module = loader.load_module() print(my_module.MY_CONSTANT) return my_module.MY_CONSTANT
注意事项
- 确保当前会话拥有
@my_github_stage的READ权限 - 如果导入的是多文件包,需将整个包目录上传到Stage,再通过
add_import添加整个目录,之后按包结构导入 - 方法一中的
snowflake_import_directory是Snowpark会话专属的临时目录,仅在会话运行期间有效
内容的提问来源于stack exchange,提问作者BraveHeart
相关产品推荐
相关产品推荐

