【问题标题】:Error installing Pyobjc on macOS 11.0 Big Sur在 macOS 11.0 Big Sur 上安装 Pyobjc 时出错
【发布时间】:2021-03-11 23:16:59
【问题描述】:

尝试在 Big Sur 的虚拟环境中安装 pyobjc 库时出现错误。安装错误,声称它“无法确定 SDK 版本。”我做了一些挖掘,看起来这个错误是由this flow中的异常触发的。

这是错误的开始:

Building wheel for pyobjc-core (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/me/Desktop/Projects/env/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/tmp/pip-install-qixc6c89/pyobjc-core/setup.py'"'"'; __file__='"'"'/private/tmp/pip-install-qixc6c89/pyobjc-core/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/tmp/pip-wheel-c0phpdjv
       cwd: /private/tmp/pip-install-qixc6c89/pyobjc-core/

这是错误的结束:

    copying PyObjCTest/test_specialtypecodes_methdef.py -> build/lib.macosx-11.0-x86_64-3.9/PyObjCTest
    running build_ext
    Cannot determine SDK version
    ----------------------------------------
ERROR: Command errored out with exit status 1: /Users/me/Desktop/Projects/env/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/tmp/pip-install-qixc6c89/pyobjc-core/setup.py'"'"'; __file__='"'"'/private/tmp/pip-install-qixc6c89/pyobjc-core/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/tmp/pip-record-l_v97344/install-record.txt --single-version-externally-managed --compile --install-headers /Users/me/Desktop/Projects/env/include/site/python3.9/pyobjc-core Check the logs for full command output.

我尝试重新安装 Xcode 开发人员工具无济于事,因为我认为这可能会刷新 SDK 引用。任何帮助将不胜感激。

  • 尝试安装pyobjc版本7.0
  • Python 版本:3.9.03.8.2(两种都试过了,都不管用)

【问题讨论】:

  • @Felipe 我不这么认为。我运行了“clang --version”,得到的输出与你所说的对你有用(版本 12.0.0 等)完全相同。对我来说,一个不同之处在于,在我的 SDK 目录中,我有三个条目而不是两个:MacOSX.sdkMacOSX10.15.sdkMacOSX11.0.sdkMacOSX.sdk 只是一个重定向到 MacOSX11.0.sdk 的别名。

标签: python python-3.x macos pip pyobjc


【解决方案1】:

我相信这个问题现在应该已经解决了。因此,运行 pip install pyobjc 应该可以按预期再次运行(针对 pyobjc-7.0.1 和 python3.9.0 进行了测试)。

如果没有,您可以为当前会话临时设置 SDK 并从头开始构建它:

SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk pip wheel pyobjc-core

(如果它不起作用,请检查您安装了哪些 SDK。它适用于 MacOSX10.15,只需运行 ls /Library/Developer/CommandLineTools/SDKs/ 并查看可用的内容。您需要 Xcode CLI 工具。) 之后,只需再次运行 pip install pyobjc 即可安装 pyobjc 的其余部分。

对于某些框架插件,您可能需要专门设置 cflags:

SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk \
    CFLAGS="-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk" \
    pip wheel pyobjc-framework-cocoa

再次在您的系统上使用 10.X SDK 切换 MacOSX10.14.sdk

有更多关于this related GitHub issue 的信息,我无耻地从s.o. 上的@hoefling 窃取了这个解决方案。

【讨论】:

  • 是的,刚刚运行pip install pyobjc,它顺利通过了?
【解决方案2】:

我也遇到了这个问题,设法通过从/Library/Developer/CommandLineTools/SDKs 中删除符号链接和除 11.0 之外的所有 SDK 来解决它。不完全确定这对系统稳定性或其他软件有什么作用,但 pip install pyobjc 确实完成了。

我并不声称自己是 MacOS 开发方面的专家,所以 YMMV。

【讨论】:

  • 我很犹豫要不要尝试这个,只是因为正如您指出的那样,我不知道删除其他 SDK/符号链接可能会产生什么副作用。
【解决方案3】:

PyObjC 应该使用二进制轮子安装(无需编译)。如果没有问题,请在 GitHub 中提交问题,并包含有关您的 Python 安装的信息(例如 Python 的安装方式)。

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 2021-06-19
    • 2021-08-04
    • 2021-05-31
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多