Docker CentOS7镜像安装psutil:Windows/Linux成功Mac(M1)失败原因咨询
跨平台构建差异的原因
1. 预编译包的架构适配限制
psutil包含C扩展代码,在x86_64架构的Windows/Linux环境中,pip可以直接获取官方预编译好的wheel包,无需本地编译,因此即使缺少Python开发头文件(Python.h)也能完成安装。但ARM64架构(M1 Mac属于该架构)下,CentOS7对应的psutil预编译wheel包不存在,pip只能下载源码进行本地编译,这就必须依赖Python开发文件,而默认安装的python3包不包含这些文件,所以编译报错。
2. CentOS7不同架构的Python包内容差异
CentOS7的x86_64版本中,python3包可能附带了编译C扩展所需的基础头文件,或者pip能通过系统路径自动找到这些文件;但ARM64版本的python3包仅提供运行时环境,不包含编译依赖的Python.h等开发文件,必须手动安装python-devel包来补充这些依赖。
3. Docker构建的架构默认行为
在M1 Mac上,Docker默认会构建与主机架构匹配的ARM64版本CentOS7镜像,而Windows/Linux主机上构建的是x86_64版本镜像。两个架构的CentOS7镜像中,python3包的依赖配置不同,这就导致ARM64镜像构建时必须额外安装python-devel才能满足psutil的编译需求。
内容的提问来源于stack exchange,提问作者Freddy
相关产品推荐
相关产品推荐

