在 Big Sur 上安装密码学时出现 Pip 错误

Posted

技术标签:

【中文标题】在 Big Sur 上安装密码学时出现 Pip 错误【英文标题】:Pip error installing cryptography on Big Sur 【发布时间】:2021-03-03 06:29:30 【问题描述】:

使用 pip 版本 20.2.4、Python 3.8.2 和 Big Sur 11.0.1。

当我运行pip install cryptography 时,我收到此错误:

  Building wheels for collected packages: cffi
    Building wheel for cffi (setup.py): started
    Building wheel for cffi (setup.py): finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /Users/xxx/projects/xxx/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/g8/nj6ghjhgj11j84rsjmqqb00000gn/T/pip-install-aufpkz3c/cffi/setup.py'"'"'; __file__='"'"'/private/var/folders/g8/nj6ghjhgj11j84rsjmqqb00000gn/T/pip-install-aufpkz3c/cffi/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/var/folders/g8/nj6ghjhgj11j84rsjmqqb00000gn/T/pip-wheel-asotxqfl
         cwd: /private/var/folders/g8/nj6ghjhgj11j84rsjmqqb00000gn/T/pip-install-aufpkz3c/cffi/
    Complete output (42 lines):
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.14.6-x86_64-3.8
    creating build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/backend_ctypes.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/error.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/setuptools_ext.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/__init__.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/cffi_opcode.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/vengine_gen.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/pkgconfig.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/model.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/ffiplatform.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/api.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/vengine_cpy.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/commontypes.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/lock.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/recompiler.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/cparser.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/verifier.py -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/_cffi_include.h -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/parse_c_type.h -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/_embedding.h -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    copying cffi/_cffi_errors.h -> build/lib.macosx-10.14.6-x86_64-3.8/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.macosx-10.14.6-x86_64-3.8
    creating build/temp.macosx-10.14.6-x86_64-3.8/c
    clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/local/Cellar/libffi/3.3/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ffi -I/Users/xxxx/projects/xxxx/venv/include -I/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -c c/_cffi_backend.c -o build/temp.macosx-10.14.6-x86_64-3.8/c/_cffi_backend.o
    c/_cffi_backend.c:5854:2: error: Apple Arm64 ABI requires ffi_prep_cif_var
    #error Apple Arm64 ABI requires ffi_prep_cif_var
     ^
    c/_cffi_backend.c:6304:9: warning: 'ffi_prep_closure' is deprecated [-Wdeprecated-declarations]
        if (ffi_prep_closure(closure, &cif_descr->cif,
            ^
    /usr/local/Cellar/libffi/3.3/include/ffi.h:341:18: note: 'ffi_prep_closure' has been explicitly marked deprecated here
      __attribute__((deprecated))
                     ^
    1 warning and 1 error generated.
    error: command 'clang' failed with exit status 1
    ----------------------------------------
    ERROR: Failed building wheel for cffi

在升级 MacOS 之前,我从未遇到过这种情况。知道我可以尝试什么吗?

【问题讨论】:

自最新版本以来,cffi 中有一些修复,看起来相关。你可以试试pip install hg+https://foss.heptapod.net/pypy/cffi吗? 有趣。我得到ERROR: Error [Errno 2] No such file or directory: 'hg' while executing command hg clone --noupdate -q https://foss.heptapod.net/pypy/cffi /private/var/folders/g8/nj61c9fhhbjdvbhhbmqqb00000gn/T/pip-req-build-e3dcg2vf ERROR: Cannot find command 'hg' - do you have 'hg' installed and in your PATH? 我可以按照建议从最新提交中安装cffi(并且导入模块有效),但是当我尝试安装cryptographyargon2-cffi 时,pip 显然会尝试重新安装cffi 当然失败了。这是在一个全新的虚拟环境中。任何想法为什么? 它声称正在尝试安装cffi“使用缓存的cffi-1.14.3.tar.gz”,即使我使用--no-cache-dir标志... 实际上,这似乎是由 Big Sur 上的 pip 中的错误引起的:github.com/pypa/pip/issues/9138github.com/nolze/msoffcrypto-tool/issues/54 【参考方案1】:

首先安装openssl

brew install openssl

然后导出编译器选项:

export CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" 
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

现在你可以使用 pip install

pip3 install cryptography==2.8

【讨论】:

在 Big Sur 11.1 brew install openssl 上为您提供“已安装”,但我完成了导出和 pip install 工作。感谢您的提示。 @tacan 是的,但是导出编译器选项可以解决问题! 在 Big Sur 上,export 行不够用。即使已经安装了 openssl,我还是重新安装了它以查看它是否有帮助。对于较旧的(1.11.5)版本的 cffi 仍然失败【参考方案2】:
env LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography

【讨论】:

这应该是最佳答案!在带有 Big Sur 11.6 的 M1 Arm Mac 上仍然是正确的【参考方案3】:

根据密码学 GitHub 上的 this issue,截至 2020 年 11 月,只需将 pip 升级到最新版本即可正常工作。我自己在 pip 19 上遇到了这个错误,升级到 pip 21.0.1 为我解决了这个问题。

【讨论】:

【参考方案4】:

hg command not found 表示您缺少 mercurial

brew install mercurial.

那么Armin Rigo's的答案就是金子。

【讨论】:

【参考方案5】:

你应该试试poetry shellpip install cryptography

【讨论】:

【参考方案6】:

上面@serge-g 的答案在带有 Homebrew 和 Big Sur 11.6 的 M1 Mac / ARM64 上运行良好。

我必须进行以下更改:

brew install openssl

export CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" 
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

那时安装cryptography 为我工作,通过 pip3 install cryptography==2.8

仅供参考,在我的情况下,cryptography 是 Azure CLI Python 包 (pip3 install azure-cli) 的依赖项。感谢@serge-g 为我指明了正确的方向!

【讨论】:

@Simeon Aleksov 的答案是最好的答案,因为无论在哪里安装自制软件,它都可以工作!

以上是关于在 Big Sur 上安装密码学时出现 Pip 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用自制软件在 Mac Big Sur 上为 PHP 7.3.24 安装 pgsql 扩展时出现问题

无法在 Big Sur 上安装 nvm,找不到 CLT

无法在 macOS“Big Sur”和 python 3.8 中编译 pip 包:“ld:未知选项:-Bsymbolic”

错误:命令“clang”失败,退出状态为 1:在 MacOS Big Sur M1 上安装熊猫

python:使用pip安装时出现Fatal error in launcher错误

在 macOS Big Sur 上安装可可豆荚时出错