繁体   English   中英

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

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

仅在 virtualenv 中它们不起作用。

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

脚步:

  1. 禁用 SIP :在恢复模式下重新启动 MacBook。 打开Utilities > Terminal输入csrutil disable ref: 禁用和启用系统完整性保护
  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。

Note: MxJ24 on github provides this solution and lists some useful scripts for python/django/brew: https://gist.github.com/MxJ24/e1386c9012f533cfbedfed5114da3e60

Python 2 virtualenvs 目前还不能在带有 Apple Silicon 芯片的 Mac 上工作。 有关详细信息,请参阅https://github.com/pypa/virtualenv/issues/2024

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


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


如果这不是一个可行的选择,那么我会考虑使用Docker 而不是 virtualenv python:2 Docker 映像具有最新的 Python 2.7.18 版本,可用于 aarch64 架构,因此无需 x86_4 仿真即可运行。 我不知道您的用例,但我使用的是 IntelliJ IDEA/PyCharm,它支持使用 Docker 作为 SDK,因此在一次性设置后它是无缝的。

通过在终端中执行 arch -x86_64 $SHELL 这个命令,使用 SHELL 作为 x86_64 模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM