如何在Mac本地编译Cython的.pyx文件适配AWS Lambda?
解决Mac本地编译Cython扩展的方案
首先明确:你之前设置的manylinux2014_x86_64是Linux平台的编译标准,Mac环境下setuptools会直接忽略这个参数,所以不会生效。下面分两种场景给出可行方案:
场景1:编译Mac本地可运行的Cython扩展
- 补全Mac编译环境:执行
xcode-select --install安装Xcode命令行工具(包含clang、make等编译必需工具) - 更新依赖包:
pip install --upgrade cython setuptools,避免旧版本工具的兼容性问题 - 调整setup.py:移除无效的
platforms参数,或者根据你的Mac OS版本指定Mac平台标识(比如macosx_10_15_x86_64,对应Catalina系统),示例代码:from setuptools import setup from Cython.Build import cythonize script = 'some.pyx' setup( ext_modules=cythonize(script), platforms='macosx_10_15_x86_64' # 可选,根据你的系统版本调整 ) - 执行编译:
python3 setup.py build_ext --inplace,如果遇到权限报错,追加--user参数:python3 setup.py build_ext --inplace --user
场景2:在Mac本地编译兼容manylinux的Linux扩展(替代EC2)
如果你的需求是生成能在Linux环境运行的manylinux标准扩展,不需要依赖EC2,用Docker即可在Mac上模拟manylinux环境:
- 安装Docker Desktop for Mac并启动
- 拉取manylinux2014镜像:
docker pull quay.io/pypa/manylinux2014_x86_64 - 将本地代码目录挂载到容器中并进入交互环境:
docker run -v $(pwd):/src -w /src quay.io/pypa/manylinux2014_x86_64 bash - 在容器内安装对应版本的Python和依赖(以Python3.9为例,容器内
/opt/python/目录下有多个预编译的Python版本):/opt/python/cp39-cp39/bin/pip install cython setuptools - 执行编译:
/opt/python/cp39-cp39/bin/python setup.py build_ext --inplace - 编译完成后退出容器,本地代码目录中会生成符合manylinux标准的扩展文件
内容的提问来源于stack exchange,提问作者Daniel Olson
相关产品推荐
相关产品推荐

