Python/pip 进程在 virtualenv 中被杀死(Apple M1 芯片)

Python/pip process are killed in virtualenv (Apple M1 chip)

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

[1]    29116 killed     pip

[1]    29141 killed     python

Python 和 M1 MacBook 原生环境中的 pip 运行 没问题。

只有在 virtualenv 中它们不起作用。

经过一番研究,我发现它与“x86_64”和“arm 64”架构有关。要解决这个问题,你必须 运行 virtualenv python/pip in x86_64 mode.

步骤:

  1. 禁用 SIP:在恢复模式下重新启动 MacBook。打开 Utilities > Terminal 输入 csrutil disable。参考:Disabling and Enabling System Integrity Protection
  2. 运行 SHELL as x86_64 mode: 在终端中输入 arch -x86_64 $SHELL
  3. 执行python/pip成功

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

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

alias x86="arch -x86_64 $SHELL"

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

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

Python 2 virtualenvs 目前无法在使用 Apple Silicon 芯片的 Mac 上运行。有关详细信息,请参阅 https://github.com/pypa/virtualenv/issues/2024

涉及禁用系统完整性保护和使用 x86_64 模拟的解决方法可能不安全且效率低下,我建议 反对 以下他们。


最好的解决方案显然是 switch/migrate/upgrade 到 Python 3,virtualenv 就像一个魅力。


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