在python:alpine的docker映像中安装依赖出错

alpine是linux家族中的一个超小发行版,在docker生态中很受欢迎,毕竟体积足够小,基本功能也满足需求。所以有很多基于alpine的docker映像,比如python:alpine

最近基于python:alpine写了一个项目,要使用pyexiv2包。但发现怎么装都是装的老版本2.5.0而不是最新的2.8.3

在pyexiv2的issue中搜了下,发现出现相同问题的都是arm64的mac,而我的docker环境是最常见的x86_64。

使用pip intsall -vvv pyexiv2查看安装过程,发现所有的wheels都没匹配上。

对比2.5.0和2.8.3的sheels,终于发现区别:2.5.0的linux wheels是manylinux1_x86_64,而2.8.3则是manylinux2014_x86_64

查了下manylinux,发现是一个标准,用于解决linux下的二进制兼容性问题。

目前有这些版本:

pyexiv2 v2.5.0使用的manylinux1支持musl(alpine使用的libc库),manylinux2014不支持musl,所以无法匹配alpine。

已经有人提了pre-PEP,要重新支持在容器中大热的alpine,形成了PEP 656 – Platform Tag for Linux Distributions Using Musl,目前已经完成

但要各个包开发者都从manylinux2014切换过来还需要一段时间,所以目前还是使用python:slim镜像吧。