在 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
(并且导入模块有效),但是当我尝试安装cryptography
或argon2-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 shell
和pip 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 扩展时出现问题
无法在 macOS“Big Sur”和 python 3.8 中编译 pip 包:“ld:未知选项:-Bsymbolic”
错误:命令“clang”失败,退出状态为 1:在 MacOS Big Sur M1 上安装熊猫