部署Django应用到AWS时出现Pycairo依赖安装错误
解决AWS ElasticBeanStalk部署中Pycairo间接依赖及编译失败问题
一、定位依赖Pycairo的间接包
试试用pip的依赖分析工具找出根源:
先在本地安装依赖树工具:
pip install pipdeptree直接搜索Pycairo的依赖链:
pipdeptree | grep -i pycairo如果没结果,就生成完整依赖树再查找:
pipdeptree > dependency_tree.txt打开文件搜索
pycairo,就能找到它的上层依赖包。从你的requirements列表来看,reportlab是最可能的候选——它生成PDF矢量图形时会依赖Pycairo;folium或gmplot也有概率,但reportlab的可能性最高。
二、解决Pycairo编译失败问题
之前在.ebextensions中添加cairo无效,大概率是系统依赖安装不完整,得把编译Pycairo需要的所有包都装上:
创建或修改
.ebextensions/cairo.config文件,内容如下:packages: yum: cairo-devel: [] gcc: [] gcc-c++: [] pkgconfig: [] python3-devel: [] # 若使用Python2,替换为python27-devel libffi-devel: [] pixman-devel: [] freetype-devel: [] fontconfig-devel: []如果你的ElasticBeanStalk环境是Python3.7及以上,需要添加环境变量让pip找到系统库,新建
.ebextensions/env.config:option_settings: aws:elasticbeanstalk:application:environment: PKG_CONFIG_PATH: "/usr/lib64/pkgconfig:/usr/share/pkgconfig"
三、备选方案:固定间接依赖版本
如果是某个依赖包的新版本才引入了Pycairo,之前的版本无此依赖,可以将该包版本固定到之前正常部署的版本。比如确认是reportlab问题的话,在requirements.txt中添加:
reportlab==3.5.59
(版本号替换为你之前成功部署时的对应版本)
四、验证步骤
- 先在本地执行
pip install -r requirements.txt,确认依赖安装正常 - 再重新部署到ElasticBeanStalk,观察日志是否不再出现Pycairo相关错误
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

