Snowflake函数导入googletrans模块遇httpcore属性错误及版本兼容问题
解决Snowflake中调用googletrans时的httpcore属性错误及依赖兼容问题
问题根源
googletrans新版本依赖的httpcore/httpx版本与Snowflake内置Python环境不兼容,或者打包时未适配Snowflake的Linux x86_64平台,导致出现AttributeError: module 'httpcore' has no attribute 'SyncHTTPTransport',调整版本后又触发依赖冲突。
解决步骤
锁定兼容版本组合
使用经过验证的稳定版本组合,确保与Snowflake环境适配:googletrans==4.0.0-rc1+httpcore==0.15.0+httpx==0.23.0适配Snowflake平台打包依赖
避免本地平台依赖干扰,用pip指定Snowflake的Linux x86_64平台下载二进制包:pip install googletrans==4.0.0-rc1 httpcore==0.15.0 httpx==0.23.0 --platform linux_x86_64 --only-binary=:all: -t ./googletrans_package正确打包成Zip
进入googletrans_package目录,将所有文件和子目录直接打包为zip(不要包含外层的googletrans_package文件夹):cd googletrans_package zip -r ../googletrans.zip .上传至Snowflake Stage
使用PUT命令将zip包上传到你的Snowflake Stage(关闭自动压缩避免重复处理):PUT file:///本地路径/googletrans.zip @your_stage AUTO_COMPRESS=FALSE;创建并测试UDF
创建Python UDF时指定导入的包,示例代码:CREATE OR REPLACE FUNCTION TRANSLATE_TEXT(input_str STRING, target_lang STRING) RETURNS STRING LANGUAGE PYTHON RUNTIME_VERSION = 3.8 -- 与打包时的Python版本匹配 IMPORTS = ('@your_stage/googletrans.zip') HANDLER = 'translate.handler' AS $$ from googletrans import Translator def handler(input_str, target_lang): translator = Translator() return translator.translate(input_str, dest=target_lang).text $$; -- 测试函数 SELECT TRANSLATE_TEXT('Hello World', 'zh-CN');
关键说明
- Snowflake的Python运行时基于Linux x86_64,必须指定对应平台打包,否则会出现依赖架构不兼容问题。
- 避免使用googletrans的最新正式版,其依赖的httpcore版本过高,与Snowflake环境冲突。
内容的提问来源于stack exchange,提问作者user12206796
相关产品推荐
相关产品推荐

