使用错误的Mac OS库进行Cython编译

时间:2018-10-09 20:23:49

标签: python macos cython setuptools

我正在使用Cython构建一个项目,并且在某些特定系统上遇到了一些有趣的安装问题。问题归结为Mac OS版本不匹配,或者我对Mac OS版本的理解不匹配。

在系统上安装Cython库时,即使我的系统告诉我我在10.13上,编译日志也显示我正在使用Mac OS版本10.12。编译日志的摘录如下:

creating build/temp.macosx-10.12-x86_64-3.6

这对我来说不是问题,但是另一个用户在10.13上发布系统时遇到了麻烦,但是他们的编译显示10.7(这需要其他解决方法)。

是否可以更新此构建系统?还是我误解了Mac OS?

是否可以通过Python脚本判断将使用哪些构建库?

谢谢!

编辑:

平台信息的输出:

>>> python -c "import platform; print(platform.mac_ver())"
('10.13.6', ('', '', ''), 'x86_64')

>>> python -c "import distutils.util; print(distutils.util.get_platform())"
macosx-10.12-x86_64

1 个答案:

答案 0 :(得分:0)

我的环境

Big Sur(macOS 10.16),python3.6和cython也出现了类似的问题。 检查cython(.pyxbld)的构建目录,我发现temp.macOSX-10.7的构建和文件显然与10.16不兼容。

一些解释为什么会发生

在内部,cython使用distutils来确定平台版本(与其他东西相对)。 https://github.com/python/cpython/blob/master/Lib/distutils/util.py那么distutils怎么了?

经过大量搜索(包括这篇文章),我遇到了一个非常有趣且很好的文章(尽管从2014年开始),它解释了这种现象。 https://lepture.com/en/2014/python-on-a-hard-wheel

基本上,它与distutils的构建方式有关,并且具有硬编码的平台标签...(这也适用于wheel文件)。

解决方案(种类)

似乎解决方法是:

  1. 重新安装python(然后重新安装所有软件包)
  2. 确保python -c "import distutils.util; print(distutils.util.get_platform())" macosx-10.12-x86_64输出正确的版本。

修改

显然,在Anaconda的Big Sur上,此解决方案尚不起作用...(如果在Anaconda上的解决方案将起作用,则正在进行的工作将会更新)[2020年11月20日星期五]