Python/pip 进程在 virtualenv(Apple M1 芯片)中被终止

Sea*_*eng 12 python macos pip virtualenv apple-m1

当我在 MacBook M1 芯片 virtualenv 中执行 pip 或 python 时,该进程总是立即终止,并显示如下消息:

[1]    29116 killed     pip
Run Code Online (Sandbox Code Playgroud)

或者

[1]    29141 killed     python
Run Code Online (Sandbox Code Playgroud)

Python 和 pip 在 M1 MacBook 原生环境中运行良好。

仅在 virtualenv 中它们不起作用。

Sea*_*eng 8

经过一番研究,我发现它与“x86_64”和“arm 64”架构有关。为了解决这个问题,你必须在x86_64模式下运行virtualenv python/pip。

脚步:

  1. 禁用 SIP:在恢复模式下重新启动 MacBook。打开Utilities > Terminal输入csrutil disable. 参考:禁用和启用系统完整性保护
  2. 以 x86_64 模式运行 SHELL:在终端中输入arch -x86_64 $SHELL
  3. 执行python/pip成功

之后,我再次启用SIP并继续arch -x86_64 $SHELL每次使用。它将成功执行 virtualenv 中的 python/pip 。

为了节省时间,我在 .zshrc 中添加了一个别名

别名 x86="arch -x86_64 $SHELL"

现在,如果我需要在 x86_64 模式下执行某些进程,我只需键入x86即可打开 x86_64 shell。

注意:github上的MxJ24提供了这个解决方案,并列出了一些python/django/brew有用的脚本:https://gist.github.com/MxJ24/e1386c9012f533cfbedfed5114da3e60

  • 不知道为什么,但只是设置别名对我有用。 (2认同)

Gre*_*cki 5

截至目前,Python 2 virtualenv 还无法在配备 Apple Silicon 芯片的 Mac 上运行。有关更多信息,请参阅https://github.com/pypa/virtualenv/issues/2024 。

涉及禁用系统完整性保护和使用 x86_64 模拟的解决方法可能不安全且效率低下,我建议不要这样做遵循它们。


最好的解决方案显然是切换/迁移/升级到Python 3,为此 virtualenv 的工作就像一个魅力。


如果这不是一个可行的选择,那么我会考虑使用Docker 而不是 virtualenvpython:2Docker 镜像具有最新的 Python 2.7.18 版本,并且可在 aarch64 架构上使用,因此无需 x86_64 模拟即可运行。我不知道你的用例,但我使用的是 IntelliJ IDEA/PyCharm,它支持使用 Docker 作为 SDK,所以在一次性设置后它是无缝的。