【问题标题】:Python/pip process are killed in virtualenv (Apple M1 chip)Python/pip 进程在 virtualenv 中被杀死(Apple M1 芯片)
【发布时间】:2021-06-25 20:16:33
【问题描述】:

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

[1]    29116 killed     pip

[1]    29141 killed     python

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

仅在 virtualenv 中它们不起作用。

【问题讨论】:

  • 为了便于搜索:在我使用 Bash 的 Mac M1 上,错误消息略有不同:Killed: 9
  • 此问题仅存在于 Python 2。对于 Python 3,virtualenvs 在配备 Apple M1 芯片的 Mac 上运行良好。

标签: python macos pip virtualenv apple-m1


【解决方案1】:

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

步骤:

  1. 禁用 SIP:在恢复模式下重启 MacBook。打开Utilities > Terminal 输入csrutil disable。参考:Disabling and Enabling System Integrity Protection
  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】:

Python 2 virtualenvs 目前还不能在配备 Apple M1 芯片的 Mac 上运行。请参阅https://github.com/pypa/virtualenv/issues/2024 了解更多信息。

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


最好的解决方案(恕我直言)是切换/迁移/升级到 Apple Silicon 原生支持的 Python 3。


如果这不是一个可行的选择,那么我会考虑使用 Docker 而不是 virtualenv。 python:2 Docker 镜像具有最新的 Python 2.7.18 版本,并且在 aarch64 架构上可用,因此它可以在没有 x86_64 仿真的情况下运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2022-11-10
    • 2021-04-10
    • 2022-08-16
    相关资源
    最近更新 更多