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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:56:03