Linux环境下PyPy 3.7安装ephem包出现ob_base相关gcc编译失败错误
PyPy3.7环境安装ephem包编译报错解决方案
报错原因
该编译错误是旧版本ephem的C扩展代码与PyPy的Python对象头定义不兼容导致的:
旧版ephem的宏定义OB_TYPE默认调用了CPython特有的ob_base结构体成员,但PyPy的头文件中自定义对象的结构体没有该成员,因此gcc编译时直接抛出成员不存在的错误,不属于依赖缺失问题。
解决方案
- 方案1:安装新版兼容ephem(推荐)
最新版ephem已经官方修复了PyPy兼容性问题,直接执行以下命令安装即可:pypy3 -m pip install --upgrade ephem - 方案2:手动修改旧版源码适配
如果你有版本要求必须使用旧版ephem,可手动修改源码编译:- 下载对应版本的ephem源码包:
pypy3 -m pip download ephem==<你的目标版本号>- 解压源码包后,找到
extensions/_libastro.c文件打开 - 将第20行的代码
#define OB_TYPE ob_base.ob_type替换为#define OB_TYPE ob_type - 保存后在源码根目录执行手动安装:
pypy3 -m pip install . - 方案3:使用纯Python替代库
如果你不想修改源码,也可以改用纯Python实现的天文计算库skyfield,功能与ephem对齐,原生支持PyPy无需编译,安装命令:pypy3 -m pip install skyfield
内容的提问来源于stack exchange,提问作者enesgur
相关产品推荐
相关产品推荐

