Apple M1 使用 virtualenv 报错问题
Apple M1 使用 virtualenv 报错问题
问题最开始出现是因为使用 IntelliJ idea 创建 python 的 venv 时,提示 virtualenv 错误。不仅提示错误,创建出来的 venv 下 bin 文件无法执行。
而在之前 x86 的 MacOS 上并没有此问题。
通过手动使用 virtualenv 创建 venv 时发现,但是如果想要使用 python 2,那么在使用 virtualenv 创建的 venv 中,bin 文件会出现无法执行的问题 zsh: killed {anything}
。
提示
$ ./venv/bin/python
zsh: killed ./venv/bin/python
如果使用 python 3 ,则没有此问题。
此问题在 Apple M1 上特别突出,根本原因是 virtualenv 创建的 bin 是 arm 架构,而 python 2 是 x86 架构,导致程序不兼容。
解决方案 参考 https://stackoverflow.com/questions/66860350/python-pip-process-are-killed-in-virtualenv-apple-m1-chip
使用 x86 架构执行 virtualenv 即可,操作如下:
- 关闭 SIP: 重启 MacBook 进入 Recover Mode (关机,长按 M1 的开机键,直到出现「启动选项」). 恢复模式下,点击「工具」-> 「终端」 输入
csrutil disable
. ref: Disabling and Enabling System Integrity Protection - 使用 x86_64 模式: 在终端输入
arch -x86_64 $SHELL
, 比如sudo arch -x86_64 virtualenv venv
- 成功创建
venv
目录,venv/bin/python
可以成功执行
TIPS: 必须关闭 SIP
以上的执行方法可以针对任何因为架构问题导致无法执行的情况。