我正在使用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
答案 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文件)。
解决方案(种类)
似乎解决方法是:
python -c "import distutils.util; print(distutils.util.get_platform())" macosx-10.12-x86_64
输出正确的版本。修改
显然,在Anaconda的Big Sur上,此解决方案尚不起作用...(如果在Anaconda上的解决方案将起作用,则正在进行的工作将会更新)[2020年11月20日星期五]