在 Apple Silicon M1 Mac 上安装加密

Joe*_*icz 8 python-cryptography apple-silicon apple-m1

帮助!我正在尝试在我的 m1 上安装加密。我知道我可以在 rosetta 模式下运行终端,但我想知道是否有办法不这样做。

输出:

    ERROR: Command errored out with exit status 1:
     command: /opt/homebrew/opt/python@3.9/bin/python3.9 /opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/tmpl4sga84k
         cwd: /private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-install-jko4b562/cryptography_7b1bbc9ece2f481a8e8e9ea03b1a0030
    Complete output (55 lines):
    
        =============================DEBUG ASSISTANCE=============================
        If you are seeing a compilation error please try the following steps to
        successfully install cryptography:
        1) Upgrade to the latest pip and try again. This will fix errors for most
           users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
        2) Read https://cryptography.io/en/latest/installation.html for specific
           instructions for your platform.
        3) Check our frequently asked questions for more information:
           https://cryptography.io/en/latest/faq.html
        =============================DEBUG ASSISTANCE=============================
    
    Traceback (most recent call last):
      File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", line 280, in <module>
        main()
      File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", line 263, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/opt/homebrew/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", line 133, in prepare_metadata_for_build_wheel
        return hook(metadata_directory, config_settings)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 161, in prepare_metadata_for_build_wheel
        self.run_setup()
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 145, in run_setup
        exec(compile(code, __file__, 'exec'), locals())
      File "setup.py", line 44, in <module>
        setup(
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/__init__.py", line 153, in setup
        return distutils.core.setup(**attrs)
      File "/opt/homebrew/Cellar/python@3.9/3.9.1_7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/distutils/core.py", line 108, in setup
        _setup_distribution = dist = klass(attrs)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 432, in __init__
        _Distribution.__init__(self, {
      File "/opt/homebrew/Cellar/python@3.9/3.9.1_7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/distutils/dist.py", line 292, in __init__
        self.finalize_options()
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 708, in finalize_options
        ep(self)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 715, in _finalize_setup_keywords
        ep.load()(self, ep.name, value)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/cffi/setuptools_ext.py", line 219, in cffi_modules
        add_cffi_module(dist, cffi_module)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/cffi/setuptools_ext.py", line 49, in add_cffi_module
        execfile(build_file_name, mod_vars)
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/cffi/setuptools_ext.py", line 25, in execfile
        exec(code, glob, glob)
      File "src/_cffi_src/build_openssl.py", line 77, in <module>
        ffi = build_ffi_for_binding(
      File "src/_cffi_src/utils.py", line 54, in build_ffi_for_binding
        ffi = build_ffi(
      File "src/_cffi_src/utils.py", line 74, in build_ffi
        ffi = FFI()
      File "/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/cffi/api.py", line 48, in __init__
        import _cffi_backend as backend
    ImportError: dlopen(/private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/_cffi_backend.cpython-39-darwin.so, 2): Symbol not found: _ffi_prep_closure
      Referenced from: /private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/_cffi_backend.cpython-39-darwin.so
      Expected in: flat namespace
     in /private/var/folders/hj/5zfkv68d7lqgrfqt046bn23c0000gn/T/pip-build-env-9bqzge_f/overlay/lib/python3.9/site-packages/_cffi_backend.cpython-39-darwin.so
Run Code Online (Sandbox Code Playgroud)

我试图像他们在该代码块中所说的那样构建和运行相同的错误。我环顾四周,似乎还没有人找到修复程序,但这些东西通常已经两个月大了。我错过了什么?

Pau*_*rer 16

此问题是由于 libffi 标头版本与动态链接器找到的 libffi 版本不匹配所致。一般来说,遇到这个问题的用户似乎安装了自制软件 libffi 并以某种方式针对它构建了 Python。

发生这种情况时cfficryptography依赖项)编译,但在运行时失败并引发此错误。这应该可以通过将正确的路径作为链接器参数传递来解决。要重新安装,cffi您应该pip uninstall cffi遵循

LDFLAGS=-L$(brew --prefix libffi)/lib CFLAGS=-I$(brew --prefix libffi)/include pip install cffi --no-binary :all:

这是一个丑陋的解决方法,但现在可以让您克服这个障碍。

更新:我已经为 macOS 上传了 arm64 轮子,因此如果您pip是最新的,则不再需要以下编译。但是,如果由于某种原因您希望自己编译它:

LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography

  • 谢谢,在其他地方找到了这个,但这绝对是正确的答案。 (2认同)

Mah*_*von 12

我正在使用 Macbook Pro M1 2020 型号并遇到了同样的问题。问题可能只出在我的 cffi 和 pip 版本上。因为这 4 个步骤帮助了我 -

  1. 卸载旧的 cffipip uninstall cffi
  2. 升级点python -m pip install --upgrade pip
  3. 重新安装 cffipip install cffi
  4. 安装密码学pip install cryptography


小智 9

聚会有点晚了,但上面的解决方案对我不起作用。Paul 让我走上了正轨,但我的问题是 pyenv 使用 mac libffi 进行构建,而 cffi 使用自制版本。我在某处读过这篇文章,不能声称有这种独特的见解。

我的解决方案是通过确保正确的标头库和包配置来确保我的 python (3.8.13) 是由 pyenv 使用自制 libffi 构建的:

export LDFLAGS="-L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib -L$(brew --prefix openssl@1.1)/lib -L$(brew --prefix libffi)/lib"
export CPPFLAGS="-I$(brew --prefix zlib)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix openssl@1.1)/include -I$(brew --prefix libffi)/include"
export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig:$(brew --prefix libffi)/lib/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

重建Python...

pyenv uninstall 3.8.13
pyenv install 3.8.13
Run Code Online (Sandbox Code Playgroud)

杀死 pip 缓存

pip cache purge
Run Code Online (Sandbox Code Playgroud)

最后,使用 Pipenv 重新安装我的依赖项

pipenv --rm
pipenv sync --dev
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,我就摆脱了恐惧

ImportError: dlopen(/private/var/folders/k7/z3mq67_532bdr_rcm2grml240000gn/T/pip-build-env-apk5b25z/overlay/lib/python3.8/site-packages/_cffi_backend.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '_ffi_prep_closure'
Run Code Online (Sandbox Code Playgroud)


pav*_*roo 6

也许,您会遇到更多软件包的问题,​​并且每个软件包都有自己的 Apple Silicon 解决方案,这令人筋疲力尽。

我得出了最终的解决方案:使用 x86_x64 Homebrew 安装 x86 软件包,包括 Python。因此,您的所有要求都像在 x86_x64 mac 上一样安装,并且不再存在编译错误等问题。

指示:

  1. 在 Rosetta 2 下运行 iTerm2(或默认终端应用程序)(右键单击应用程序图标 -> Get info-> Open using rosetta)。
  2. 像往常一样安装 homebrew,/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"或者出于安全原因,您可以从https://brew.sh/获取此链接(切勿在未仔细检查的情况下从 stackoverflow 复制curl 命令)。
  3. ~/.zshrc在您的(如果您使用的是 ZSH)或~/.bash_profile(如果您是 bash 用户)中添加别名: alias brew='arch -x86_64 /usr/local/bin/brew'
  4. Open using rosetta在 iTerm2 中关闭Get info

现在,每次在终端应用程序中打印时,brew您都将运行 x86_x64 Homebrew。当您从 中安装任何软件包时brew,它将自动在 Rosetta 2 下运行。


归档时间:

查看次数:

3428 次

最近记录:

4 年,4 月 前