Gevent 无法使用诗歌安装在 M1 mac 上

问题描述 投票:0回答:4

我尝试使用诗歌为虚拟环境安装许多依赖项。当它到达

gevent (20.9.0)
时,它会得到以下

import error:

ImportError: dlopen(/private/var/folders/21/wxg5bdsj1w3f3j_9sl_pktbw0000gn/T/pip-build-env-50mwte36/overlay/lib/python3.8/site-packages/_cffi_backend.cpython-38-darwin.so,
0x0002): tried:
'/private/var/folders/21/wxg5bdsj1w3f3j_9sl_pktbw0000gn/T/pip-build-env-50mwte36/overlay/lib/python3.8/site-packages/_cffi_backend.cpython-38-darwin.so'
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), '/usr/local/lib/_cffi_backend.cpython-38-darwin.so' (no such file), '/usr/lib/_cffi_backend.cpython-38-darwin.so' (no such file)

我尝试使用 pip3 代替,但仍然遇到同样的问题。

python apple-m1 gevent python-poetry
4个回答
7
投票

我在其他库中也遇到过这个问题,这个解决方案有时有效:

arch -arm64 <poetry or pip> install <lib to istall>

使用

arch -arm64
允许我为 M1 处理器安装右轮


3
投票

您需要从源代码编译它。 https://www.gevent.org/development/installing_from_source.html

arch -arm64 pip install --no-binary gevent gevent

0
投票

M1 在一个进程中需要全部 x86 代码或全部 arm64 代码。此问题是由程序尝试从本机 arm64 进程加载仅限 x86_64 的库引起的。不幸的是,这是无法完成的(参见此处)。

具体针对

gevent
,项目页面此处包含以下信息:

从 gevent 20.12.0 开始,64 位 ARM 二进制文件在 PyPI 上分发,用于 aarch64 Manylinux2014 兼容系统。安装这些需要最新版本的 pip。这些轮子不包含 c-ares 解析器,未经测试,并且以非常低的优化水平构建。鼓励 64 位 ARM 系统上 gevent 的认真生产用户构建自己的二进制轮子。

我不确定 Linux 上是否专门支持arm64,但无论如何,我建议将您的

gevent
pip
版本更新到最新版本。


0
投票

我必须将其安装在我的电脑上(而不是在虚拟环境中)。然后在虚拟环境中安装就可以了。

所以在 Apple M1 上运行

sudo arch -arm64 pip3 install --no-binary gevent gevent

然后创建并激活你的Python虚拟环境,

python3 -m venv env
source env/bin/activate
pip install -U pip
pip install gevent

如果您看到如下输出,则表示您已完成:

Collecting gevent
  Using cached gevent-22.10.2.tar.gz (6.6 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting zope.event
  Downloading zope.event-4.6-py2.py3-none-any.whl (6.8 kB)
Collecting greenlet>=2.0.0
  Using cached greenlet-2.0.2.tar.gz (164 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: setuptools in ./env/lib/python3.9/site-packages (from gevent) (58.0.4)
Collecting zope.interface
  Downloading zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl (202 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 202.4/202.4 kB 2.9 MB/s eta 0:00:00
Building wheels for collected packages: gevent
  Building wheel for gevent (pyproject.toml) ... done
  Created wheel for gevent: filename=gevent-22.10.2-cp39-cp39-macosx_10_9_universal2.whl size=2908594 sha256=c7184d20566f559ddec3b60250fbf9b8ffda973c14c93f70fc8ae22aa7b85521
  Stored in directory: /Users/pavankrn/Library/Caches/pip/wheels/7f/f7/e0/8b48eb5aabb2beca135a3fdde34df3b6938cfccf4def985a45
Successfully built gevent
Installing collected packages: zope.interface, zope.event, greenlet, gevent
  DEPRECATION: greenlet is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559
  Running setup.py install for greenlet ... done

如果您冻结您的需求

pip freeze > requirements.txt
您将找到以下软件包。

gevent==22.10.2
greenlet==2.0.2
zope.event==4.6
zope.interface==6.0
© www.soinside.com 2019 - 2024. All rights reserved.