You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac+Multipass Ubuntu虚拟机中Python虚拟环境二进制文件问题

解决方案

关于venv能否生成独立二进制文件

venv 是 Python 标准库自带的虚拟环境工具,默认不会生成独立的 Python 二进制文件,它的设计初衷是轻量复用系统 Python,所以会通过软链接指向虚拟机 /usr/bin/python3,这是它的固有机制,无法通过参数修改。

你提到的 PEP-0405 中关于独立二进制的描述,针对的是第三方工具 virtualenv——但 virtualenv 默认也会用软链接,只有添加 --always-copy 参数时,才会将系统 Python 的二进制文件完整复制到虚拟环境目录中。

可行的解决办法

方法1:用virtualenv的--always-copy创建可共享的虚拟环境

  1. 在 Ubuntu 虚拟机中安装 virtualenv:
    sudo apt update && sudo apt install virtualenv
    
  2. 在共享文件夹目录下,用以下命令创建虚拟环境:
    virtualenv --always-copy environment
    
  3. 此时查看虚拟环境的 Python 二进制文件,会发现它是实际的可执行文件而非软链接:
    readlink environment/bin/python
    # 无输出(因为是真实文件,不是链接)
    
    这样 Mac 主机的 VS Code 就能直接识别并选择这个解释器。

方法2:用VS Code Remote-SSH直接连接虚拟机

这是更推荐的方案,完全规避共享文件夹的路径问题:

  1. 获取 Multipass 虚拟机的 IP 地址:
    multipass list
    
  2. 在 VS Code 中安装「Remote - SSH」插件,通过获取到的 IP 地址连接到 Ubuntu 虚拟机。
  3. 连接成功后,直接在 VS Code 中打开虚拟机内的源码目录,此时可以正常选择虚拟环境的解释器(因为 VS Code 直接访问虚拟机的文件系统,能识别 /usr 目录下的软链接目标)。

方法3:手动复制Python二进制到共享文件夹(不推荐)

如果坚持使用共享文件夹,可手动将虚拟机的 Python 二进制复制到虚拟环境目录:

  1. 替换虚拟环境中的软链接:
    rm environment/bin/python
    cp /usr/bin/python3 environment/bin/python
    
  2. 调整虚拟环境的路径配置:编辑 environment/bin/activate,确保 VIRTUAL_ENV 等变量指向共享文件夹的正确路径,同时可能需要用 patchelf 修改复制后的 Python 二进制的依赖路径(操作较复杂,容易出现兼容性问题)。

内容的提问来源于stack exchange,提问作者plasma-dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:02:17