【发布时间】:2019-03-14 16:34:07
【问题描述】:
我正在开发一个使用 Cython 构建的项目,并且在某些特定系统上遇到了一些有趣的安装问题。问题归结为 Mac OS 版本不匹配,或者我对 Mac OS 版本的理解不匹配。
在我的系统上安装 Cython 库时,编译日志显示我使用的是 Mac OS 版本 10.12,即使我的系统告诉我我使用的是 10.13。编译日志摘录如下:
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
【问题讨论】:
-
版本不匹配是奇数;当你从终端运行
python -c "import platform; print(platform.mac_ver())"时,你会得到什么? -
所以 Python 可以正确识别平台版本。您看到的是
distutils.util.get_platform的输出 - 通过python -c "import distutils.util; print(distutils.util.get_platform())"重现该输出(另外,请确保使用正确的可执行文件,在您的情况下应该是python3.6)。在 MacOS 上,它不会显示您正在运行的平台的版本,而是显示您的 Python 发行版所基于的平台的版本。这可确保distutils使用与您将使用已编译扩展对象的 Python 发行版相同的 ABI 来构建 C 扩展。 -
一般来说,在 MacOS 上构建一个“通用”的轮子是一个很棘手的话题;如果你想在你的机器上构建一个轮子,在其他 MacOS 机器上安装和运行各种 Python 发行版,经验法则是获得一个 Python 发行版,其中
distutils.util.get_platform输出macosx-10.6-intel。这个 ABI 似乎是最兼容的一个;但是,从您的输出来看,您似乎已经安装了 brewed Python 3;根据我的经验,它不适合制造万向轮。 -
如果您希望两个版本匹配,您可以从源代码构建您自己的 Python 发行版,但请注意,使用该发行版构建的 C 扩展将与旧 ABI 不兼容。
-
仅当您正在安装的发行版是使用较新的 ABI 重建时,重新安装 Python 会导致
distutils平台版本的冲突;否则,这个数字不会改变。
标签: python macos cython setuptools