上传现有的 Python 包¶
Snowflake CLI 允许您使用 snow snowpark package
命令将现有 Python 包添加到 Snowpark 导入中。您可以在函数和存储过程中使用已经实施的包,如 PyPi 中的包。
要在 Snowpark 导入中添加 Python 包,请执行以下操作:
检查包是否已经可用¶
要检查包是否已经可用,请使用 snow snowpark package lookup
命令。
以下示例说明了查找 Snowflake Anaconda 通道上可用的包的过程:
snow snowpark package lookup numpy
Package `numpy` is available in Anaconda. Latest available version: 1.26.4.
如果在 Snowflake Anaconda 通道上没有可用的包,您可以得到类似下面的消息:
snow snowpark package lookup july
Package `july` is not available in Anaconda. To prepare Snowpark compatible package run:
snow snowpark package create july
更多信息,请参阅 snowpark package lookup 命令。
下载包并创建 Snowflake 工件¶
要下载包并创建 Snowflake 工件并进行上传,请使用 snow snowpark package create
命令。
snow snowpark package create <name>
其中:
<name>
可以是pip
支持的任何需求说明符,例如包名称、包的 URL 或本地文件路径。
其他选项:
--allow-shared-libraries
:当使用通过pip
安装的包时,允许使用共享 (.so
/.dll
) 库。--ignore-anaconda
:不在 Snowflake Anaconda 通道上查找包。--index-url
:指定用于查找包的 Python 包索引的基础 URL。URL 应指向一个符合 PEP 503 的存储库(简单存储库 API)或以相同格式布局的本地目录。--skip-version-check
:跳过比较需求和 Anaconda 之间的依赖项版本。
下面的示例说明了创建 Snowflake 工件的一些不同情况:
示例:创建包含 Anaconda 依赖项的包¶
此示例将 Python 包创建为 zip 文件,该文件可以上传到暂存区,然后由 Snowpark Python 应用程序导入。“july”包的依赖项位于 Anaconda 通道上,因此它们被排除在 .zip
文件之外。命令显示您需要包含在 Snowpark 项目的 requirements.txt
中的包。
snow snowpark package create july==0.1
Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.
The package july==0.1 is successfully created, but depends on the following
Anaconda libraries. They need to be included in project requirements,
as their are not included in .zip.
matplotlib
numpy
示例:使用 --ignore-anaconda
选项创建包¶
此示例创建您可以在 Snowpark 项目中使用的 july.zip
包,而无需向 requirements.txt
文件添加任何依赖项。错误消息指示某些包包含共享库,这些库可能无法正常工作,例如在使用 Windows 创建包时。
snow snowpark package create july==0.1 --ignore-anaconda --allow-shared-libraries
2024-05-09 15:34:02 ERROR Following dependencies utilise shared libraries, not supported by Conda:
2024-05-09 15:34:02 ERROR contourpy
numpy
pillow
kiwisolver
matplotlib
fonttools
2024-05-09 15:34:02 ERROR You may still try to create your package with --allow-shared-libraries, but the might not work.
2024-05-09 15:34:02 ERROR You may also request adding the package to Snowflake Conda channel
2024-05-09 15:34:02 ERROR at https://support.anaconda.com/
Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.
示例:创建已在 Snowflake Anaconda 通道中提供的包¶
此示例无法创建包,因为包已存在。您仍然可以使用 --ignore-anaconda
选项强制创建包。
snow snowpark package create matplotlib
Package matplotlib is already available in Snowflake Anaconda Channel.
有关创建包的更多信息,请参阅 snowpark package create 命令。
将包上传到 Snowflake 暂存区¶
要上传包,请使用 snow snowpark package upload
命令。
此命令会将 Python 包 zip 文件上传到 Snowflake 暂存区,以便在存储过程或函数的导入中引用该包。
snow snowpark package upload --file="july.zip" --stage="packages"
Package july.zip UPLOADED to Snowflake @packages/july.zip.
在 Snowpark 存储过程和函数中使用该包¶
要在存储过程或函数中使用该包,请将其添加到 snowflake.yml
中 Snowpark 定义 部分的 imports
参数中。
get_custom_package_version: handler: "functions.get_custom_package_version" signature: "" returns: string type: function imports: - "@packages/july.zip" meta: use_mixins: - snowpark_shared然后在函数处理程序中导入包。
# functions.py import july def get_custom_package_version(): return july.__VERSION__