M1 Mac+Multipass Ubuntu虚拟机中Python虚拟环境二进制文件问题
解决方案
关于venv能否生成独立二进制文件
venv 是 Python 标准库自带的虚拟环境工具,默认不会生成独立的 Python 二进制文件,它的设计初衷是轻量复用系统 Python,所以会通过软链接指向虚拟机 /usr/bin/python3,这是它的固有机制,无法通过参数修改。
你提到的 PEP-0405 中关于独立二进制的描述,针对的是第三方工具 virtualenv——但 virtualenv 默认也会用软链接,只有添加 --always-copy 参数时,才会将系统 Python 的二进制文件完整复制到虚拟环境目录中。
可行的解决办法
方法1:用virtualenv的--always-copy创建可共享的虚拟环境
- 在 Ubuntu 虚拟机中安装 virtualenv:
sudo apt update && sudo apt install virtualenv - 在共享文件夹目录下,用以下命令创建虚拟环境:
virtualenv --always-copy environment - 此时查看虚拟环境的 Python 二进制文件,会发现它是实际的可执行文件而非软链接:
这样 Mac 主机的 VS Code 就能直接识别并选择这个解释器。readlink environment/bin/python # 无输出(因为是真实文件,不是链接)
方法2:用VS Code Remote-SSH直接连接虚拟机
这是更推荐的方案,完全规避共享文件夹的路径问题:
- 获取 Multipass 虚拟机的 IP 地址:
multipass list - 在 VS Code 中安装「Remote - SSH」插件,通过获取到的 IP 地址连接到 Ubuntu 虚拟机。
- 连接成功后,直接在 VS Code 中打开虚拟机内的源码目录,此时可以正常选择虚拟环境的解释器(因为 VS Code 直接访问虚拟机的文件系统,能识别
/usr目录下的软链接目标)。
方法3:手动复制Python二进制到共享文件夹(不推荐)
如果坚持使用共享文件夹,可手动将虚拟机的 Python 二进制复制到虚拟环境目录:
- 替换虚拟环境中的软链接:
rm environment/bin/python cp /usr/bin/python3 environment/bin/python - 调整虚拟环境的路径配置:编辑
environment/bin/activate,确保VIRTUAL_ENV等变量指向共享文件夹的正确路径,同时可能需要用patchelf修改复制后的 Python 二进制的依赖路径(操作较复杂,容易出现兼容性问题)。
内容的提问来源于stack exchange,提问作者plasma-dom
相关产品推荐
相关产品推荐

