You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Windows的VS Code中通过WSL(Ubuntu)激活pipenv虚拟环境

问题根源与解决方案

你遇到的核心问题其实是Windows系统创建的pipenv虚拟环境无法在WSL Ubuntu中直接使用——因为Windows的虚拟环境里的Python解释器、激活脚本都是Windows专属格式(比如.exe可执行文件、Windows批处理脚本),而WSL是Linux环境,根本没法运行这些Windows程序,这和PATH配置、VS Code选择解释器的操作无关。

下面一步步帮你解决:

1. 在WSL Ubuntu中重新创建适配Linux的pipenv虚拟环境

首先要抛弃Windows里的虚拟环境,在WSL里从头搭建适合Linux的开发环境:

  • 打开VS Code的WSL终端,进入你的项目目录(注意用WSL的路径格式,空格要加转义符):
    cd /mnt/c/Users/this_user/OneDrive\ -\ CUT/Learning/Python/Corey\ Schafer\ -\ Django\ Framework
    
  • 先安装WSL所需的基础依赖:
    # 更新Ubuntu软件源
    sudo apt update
    # 安装Python3.7及开发工具
    sudo apt install python3.7 python3.7-dev python3-pip
    # 安装pipenv(用户级安装,无需sudo)
    pip3 install --user pipenv
    
  • 创建适配WSL的pipenv虚拟环境(指定Python3.7版本,和你Windows端版本一致):
    pipenv --python 3.7
    
  • 激活虚拟环境并验证是否生效:
    pipenv shell
    # 检查Python路径,应该指向WSL本地的虚拟环境目录
    which python
    # 输出示例:/home/this_user_name/.local/share/virtualenvs/Corey_Schafer_-_Django_Framework-<随机哈希>/bin/python
    

2. 配置VS Code(WSL远程模式)识别虚拟环境

你之前是在Windows的VS Code里操作,正确的做法是用VS Code的Remote-WSL扩展连接到WSL环境:

  • 打开VS Code,点击左下角的><图标(远程连接按钮),选择New WSL Window using Distro...,选择你的Ubuntu发行版
  • 在新打开的WSL窗口中,打开你的项目目录
  • Ctrl+Shift+P打开命令面板,输入Python: Select Interpreter,此时就能看到WSL里刚创建的pipenv虚拟环境的Python选项(格式类似Python 3.7.4 ('Corey Schafer - Django Framework': pipenv)),选择它即可
  • 此时VS Code会自动更新工作区的settings.json,无需手动修改Windows端的配置文件

3. 清理无效的PATH配置

把WSL中.profile里添加的Windows虚拟环境路径删掉,这些路径对Linux环境完全没用,还会导致PATH混乱:

  • 打开.profile文件:
    nano ~/.profile
    
  • 删除最后两行无效配置:
    #Adding path to virtual enviroments
    PATH="/mnt/c/Users/this_user/.virtualenvs:$PATH"
    export PATH
    
  • Ctrl+O保存,Ctrl+X退出,然后执行source ~/.profile使修改生效

为什么之前的操作没用?

  • 你手动执行的source <Windows激活文件路径>:Windows虚拟环境的activate.bat批处理脚本,WSL的bash没法解析,所以根本没激活成功
  • VS Code里看不到虚拟环境选项:因为你是在Windows的VS Code里,它只能识别Windows的虚拟环境,而你需要的是WSL里的Linux虚拟环境,必须用Remote-WSL模式才能识别
  • PATH里添加Windows路径:WSL优先查找Linux可执行文件,所以即使加了Windows的Scripts路径,bash也不会去执行里面的Windows.exe文件

内容的提问来源于stack exchange,提问作者learner254

火山引擎 最新活动