Apple M1芯片MacBook虚拟环境中pip与python进程执行即被终止
核心根因
进程被系统直接立即终止,本质是虚拟环境的可执行架构与当前macOS运行环境不匹配:
- 创建virtualenv时误用了Rosetta转译的x86_64架构Python,或关联了Intel架构的Python路径,生成的虚拟环境里的python/pip二进制为x86格式
- 当终端从Rosetta模式切回原生arm64模式、或是转译组件链路异常时,macOS的强制安全机制会直接终止架构不兼容的进程,不会输出常规的报错堆栈,仅显示
killed的进程终止提示 - 系统原生Python不存在架构错配问题,因此原生环境下的pip、python可正常运行,故障仅出现在虚拟环境中
排查与解决步骤
- 验证错配状态。激活出问题的虚拟环境,执行命令
file $(which python),如果输出包含Mach-O 64-bit executable x86_64,即可确认是架构错配导致的问题;正常M1原生虚拟环境的输出应为Mach-O 64-bit executable arm64。 - 直接删除现有故障虚拟环境目录,无需尝试修复旧环境的链接配置,错配的二进制链路无法通过路径修正完全恢复正常。
- 前置确认原生arm64 Python路径。在未激活任何虚拟环境的终端执行
arch -arm64 which python3,获取对应arm64版本的Python绝对路径,确认该路径下的Python本身可正常运行pip命令。 - 用确认好的arm64 Python创建新虚拟环境。执行命令
virtualenv -p /上一步获取的Python绝对路径 新虚拟环境目录,不要直接调用默认的virtualenv命令建环境,避免关联到x86版本的virtualenv程序。 - 激活新虚拟环境后,再次执行
file $(which python)确认输出为arm64格式,之后测试python、pip命令,进程就不会被直接终止。
常见避坑提示
- 不要在开启Rosetta转译模式的终端窗口里创建M1原生虚拟环境,这类环境生成后只要切换到非Rosetta终端,就会触发进程被杀的问题。
- 不要直接从Intel架构Mac拷贝旧的virtualenv环境到M1上直接激活使用,哪怕修改了bin目录下的路径配置,二进制架构不匹配的问题依然存在。
- 如果之前安装的virtualenv是x86版本,需要先在原生arm64 Python环境下执行
python3 -m pip install --upgrade virtualenv,替换为arm64版本的virtualenv工具后再创建虚拟环境。
内容的提问来源于stack exchange,提问作者Sean Cheng
相关产品推荐
相关产品推荐

