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

如何在Snowpark Python环境中添加使用未预装的Python包

如何在Snowpark Python环境中使用非预装的imblearn包

Snowflake官方Anaconda预装通道没有内置imbalanced-learn(即你需要导入的imblearn包),可以根据你的使用场景选择以下三种可行方案,按生产推荐优先级排序:

方案1:手动上传wheel包到内部stage(最稳定,生产环境首选)

这是目前Snowpark使用非预装第三方包的通用标准方案,步骤如下:

  • 提前确认你当前Snowpark环境使用的Python版本(Snowpark目前支持3.8/3.9/3.10三个版本,和你创建Session时指定的版本保持一致),下载对应Python版本、manylinux_x86_64/通用纯Python架构的imblearn安装包,同时检查imblearn的依赖项(包括scikit-learn、scipy、joblib、threadpoolctl等),如果Snowflake预装的依赖版本不满足imblearn的版本要求,需要把对应依赖的wheel包一并下载。注意不要下载Windows、macOS平台编译的二进制包,否则Snowflake运行时会加载失败。
  • 将所有准备好的wheel包上传到你有访问权限的Snowflake内部stage,可以选择用户stage、表stage或者专门创建的命名stage(推荐团队场景下建专门的公共stage存自定义依赖),上传可以用SnowSQL命令,也可以直接用Snowpark Python的API完成,示例代码:
# 已完成Session初始化的前提下,上传本地wheel包到stage
session.file.put(
    local_file_name="./imbalanced_learn-0.12.3-py3-none-any.whl",
    stage_location="@custom_pkg_stage/pkgs",
    overwrite=True
)
# 所有缺失的依赖包都按相同方式上传
  • 在编写需要用到imblearn的UDF、UDTF、存储过程时,在imports参数中指定你上传到stage的所有wheel包路径,packages参数正常声明Snowflake预装的基础依赖即可,示例:
from snowflake.snowpark import functions as F

@F.udf(
    name="smote_resample_udf",
    replace=True,
    packages=["snowflake-snowpark-python", "scikit-learn>=1.2.0"],
    imports=["@custom_pkg_stage/pkgs/imbalanced_learn-0.12.3-py3-none-any.whl"]
)
def resample_calc(input_val: list) -> list:
    # 这里可以正常导入imblearn模块
    from imblearn.over_sampling import SMOTE
    # 业务逻辑省略
    return input_val

排错提示:如果导入时提示找不到依赖,优先检查对应依赖的wheel是否已经上传、包的Python版本和运行环境是否匹配、平台架构是否为Linux兼容版本。

方案2:配置私有Conda自定义通道(适合团队级依赖管理)

如果你的Snowflake账号已经开启了自定义Conda通道功能(需要账号管理员操作开通),可以在内部搭建符合Snowflake规范的私有Conda源,将imblearn及对应依赖上传到私有通道后,在Session级别配置自定义通道地址,之后就可以像使用官方预装包一样,直接在packages参数中声明imbalanced-learn依赖,不需要手动上传单个wheel包。
这个方案适合团队有大量非预装第三方包使用需求的场景,配置完成后使用体验和官方预装包完全一致,依赖冲突处理也更简单。

方案3:虚拟环境整体打包(适合快速测试场景)

如果只是做快速功能验证,可以在本地创建和Snowpark Python版本一致的虚拟环境,在虚拟环境中用pip安装imblearn和所有需要的依赖,之后用conda-pack或者venv-pack工具把整个虚拟环境打包成tar.gz压缩包,上传到内部stage后在创建UDF/存储过程时作为整体环境导入即可。
这个方式的缺点是打包后的文件体积大,函数冷启动时间长,不适合生产环境高频调用的场景。

  • 注意:不要尝试在UDF/存储过程的运行代码中写pip install imblearn这类动态安装命令,Snowflake计算节点默认没有公网访问权限,且运行时环境做了权限限制,动态安装的方式100%会执行失败。
  • imblearn本身是纯Python实现的包,没有底层C扩展,只要依赖版本匹配,手动上传wheel的方案兼容性非常好,不需要额外做源码编译。

内容的提问来源于stack exchange,提问作者Emre Becit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:48:15