macOS 10.12编译MathSage遇_scproxy模块编译失败及导入错误
解决macOS 10.12编译MathSage时的
_scproxy导入错误 咱们先把问题捋清楚:虽然系统里已经预装了/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_scproxy.so,但MathSage的编译脚本大概率在强行重新编译这个模块,而不是直接复用系统自带的版本,这才触发了头文件语法错误、变量声明问题,最终导致ImportError。下面是几个针对性的修复方案:
方案1:让编译脚本跳过_scproxy模块的编译
- 找到MathSage源码目录里负责编译Python模块的配置文件(通常是
setup.py或者自定义的Makefile片段) - 在文件里搜包含
_scproxy的编译规则,把它从编译列表里移除 - 保存修改后重新执行
make && make clean,这时编译脚本会直接调用系统已有的_scproxy.so,跳过出错的编译步骤
方案2:手动替换编译生成的错误模块
如果找不到修改配置的地方,可以试试这个:
- 先执行
make让编译跑到失败的步骤,此时临时目录会生成错误的_scproxy.so文件 - 定位到这个临时文件的路径(一般在
build/lib.*这类编译输出目录里) - 把系统自带的
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_scproxy.so复制过去,覆盖错误文件 - 接着执行剩余编译步骤(或者重新跑
make),脚本会识别到正确的模块文件,继续完成编译
方案3:修复_scproxy.c的编译错误(进阶)
如果想从根源解决编译问题,可以手动修正源码:
- 找到源码里的
_scproxy.c文件 - 修复头文件引用错误(比如确保
<SystemConfiguration/SystemConfiguration.h>这类系统头文件路径正确) - 修正变量声明问题(比如所有变量要在代码块开头声明,老版本编译工具可能严格遵循C89标准)
- 保存修改后重新执行编译命令
补充提示
macOS 10.12预装的Python 2.7版_scproxy模块是适配系统环境编译的,直接复用是最稳妥的选择,除非你的MathSage版本有特殊定制需求,否则没必要重新编译这个模块。
内容的提问来源于stack exchange,提问作者Labrador
相关产品推荐
相关产品推荐

