Mac M1环境Python连接Snowflake触发MemoryError报错求助
问题背景
在Jupyter Notebook中使用Python建立Snowflake连接时持续触发相同报错,对应运行环境如下:
- 设备:Mac M1 芯片设备
- Python版本:3.10.4
- Conda版本:4.13.0
复现代码
完成环境标签配置后,使用如下代码发起连接:
connection = snow.connect( user = user, password = password, account = '****.us-****-*', warehouse = 'COMPUTE_WH', authenticator = authenticator )
报错信息
代码执行后首先输出身份提供商登录引导提示,随即抛出MemoryError异常,核心报错输出如下:
Initiating login request with your identity provider. A browser window should have opened for you to complete the login. If you can't see it, check existing browser windows, or your OS settings. Press CTRL+C to abort and try again...
MemoryError: Cannot allocate write+execute memory for ffi.callback(). You might be running on a system that prevents this.
排查解决思路
- 优先升级相关依赖修复适配问题:Mac M1的ARM架构对低版本cffi的内存权限机制适配存在已知缺陷,是触发该报错的最核心原因。在当前conda环境执行命令
pip install --upgrade cffi cryptography snowflake-connector-python,升级完成后重启Jupyter内核,再重新运行连接代码即可,绝大多数同场景问题可通过该操作解决。 - 校验当前Python环境的运行架构:在Notebook单元格执行代码
import platform; print(platform.machine()),如果输出结果不是arm64,说明当前conda环境是通过Rosetta 2转译运行的x86版本Python,转译层会拦截ffi回调所需的可写可执行内存分配。此时直接新建原生arm64架构的conda环境,重装Snowflake连接相关依赖即可解决。 - 临时规避方案:如果短时间内无法调整环境配置,可以修改连接的认证方式,替换掉需要拉起本地浏览器的SSO认证逻辑,改用用户名密码直连、密钥对认证等不需要调用本地浏览器回调的认证方式,即可跳过触发报错的内存分配环节。
内容的提问来源于stack exchange,提问作者Jasmine Koh
相关产品推荐
相关产品推荐

