尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

VSCode中配置多版本Python Jupyter内核:venv+ipykernel实战指南

VSCode中配置多版本Python Jupyter内核:venv+ipykernel实战指南 1. 为什么我们需要一个“优雅”的Jupyter内核配置方案如果你和我一样日常开发的主力工具是VsCode同时又离不开Jupyter Notebook的交互式探索和快速原型验证那你大概率也遇到过“内核选择”的麻烦。系统里装了Python 3.8、3.9、3.11甚至还有3.12的预览版每个项目依赖的包版本又各不相同。打开一个Notebook默认内核可能不是你想要的点击右下角切换列表里要么空空如也要么一堆你根本不想用的Anaconda环境。更头疼的是有时候你明明在VsCode的终端里激活了某个虚拟环境但Notebook就是死活不认依然固执地使用全局Python解释器。这就是我们今天要解决的问题。网上很多教程会告诉你“用Anaconda吧方便” 没错Anaconda在管理环境和内核方面确实有一套但它太“重”了。一个基础安装就几个G还会修改你的系统路径带来一些潜在的冲突。对于追求轻量、高效、且希望环境完全掌控在自己手里的开发者来说我们想要一个更“原生”、更“干净”的方案。所以这篇文章的核心就是抛开Anaconda这个“拐杖”直接使用Python官方的venv或第三方轻量工具如virtualenv来创建虚拟环境并手动将其注册为Jupyter内核。整个过程我们将完全在VsCode内部完成无需切换终端无需记忆复杂的命令目标是实现在VsCode中一键创建虚拟环境并立即可在Jupyter Notebook中选用该环境作为内核。这听起来是不是比来回折腾命令行优雅多了2. 核心原理Jupyter内核到底是什么在动手之前我们得先搞清楚我们在VsCode里点的那个“选择内核”按钮背后到底发生了什么。这能帮你理解每一步操作的意义以后出了问题也知道从哪儿排查。Jupyter内核Kernel本质上是一个独立的进程它负责执行你写在Notebook单元格Cell里的代码。当你创建一个新的Notebook.ipynb文件时你需要为它指定一个内核。这个内核决定了代码将在哪个Python解释器下运行以及能访问哪些已安装的包。那么Jupyter是如何知道你的系统里有哪些可用的内核呢答案就在一个叫做kernel.json的配置文件里。这些文件通常存放在你用户目录下的特定位置Windows:%APPDATA%\jupyter\kernels\macOS/Linux:~/.local/share/jupyter/kernels/或~/Library/Jupyter/kernels/在这个kernels目录下每个子目录代表一个内核子目录的名字就是内核在Jupyter界面中显示的名称。每个内核子目录里都必须有一个kernel.json文件。这个文件的结构非常简单它主要告诉Jupyter两件事这个内核使用哪种编程语言对我们来说就是python。启动这个内核时应该执行哪个命令。一个典型的kernel.json内容如下{ argv: [ /path/to/your/python/environment/bin/python, -m, ipykernel_launcher, -f, {connection_file} ], display_name: My Python 3.11 Env, language: python }关键就在argv这个数组。它指定了启动内核的命令行参数。第一个元素就是目标Python解释器的绝对路径。当你在Notebook里运行代码时Jupyter会启动这个命令从而在你的目标Python环境中运行代码。因此我们配置多版本Python内核的核心任务就清晰了为每一个我们想用的Python环境无论是系统级、用户级还是虚拟环境在kernels目录下创建一个对应的子目录和kernel.json文件并确保argv指向正确的Python解释器路径。理解了这一点后续的所有操作就不再是“魔法”而是有迹可循的配置。3. 环境准备在VsCode内部搭建我们的工作流我们的目标是全程在VsCode内完成所以第一步是确保VsCode本身已经就位。这里没有太多花样但从一个干净的状态开始总是好的。3.1 安装必要的VsCode扩展打开VsCode进入扩展市场CtrlShiftX搜索并安装以下两个核心扩展Python: 由Microsoft发布。这是所有Python相关功能的基础提供了语言支持、调试、测试、环境管理等。Jupyter: 同样由Microsoft发布。它提供了在VsCode中运行Jupyter Notebooks、交互式窗口Interactive Window和代码单元格的全部功能。安装后重启VsCode以确保扩展完全加载。这两个扩展是微软官方维护的兼容性和稳定性最好是我们工作流的基石。3.2 准备多个Python版本的解释器这是实现多版本内核的前提。你需要在你的操作系统上安装多个版本的Python。以macOS使用Homebrew和Windows为例macOS (使用 Homebrew):# 安装 Python 3.9 brew install python3.9 # 安装 Python 3.10 brew install python3.10 # 安装 Python 3.11 brew install python3.11安装后它们的可执行文件通常位于/usr/local/bin/python3.9/usr/local/bin/python3.10等路径下。Windows: 最推荐的方式是直接从 Python官网 下载不同版本的安装包。安装时务必勾选“Add Python X.X to PATH”这样在命令行中才能直接调用py命令。Windows提供了一个非常实用的py启动器你可以通过py -3.9py -3.10来调用特定版本的Python。安装完成后你可以在VsCode内置终端Ctrl里验证# 在Windows上 py --list # 会显示所有已安装的Python版本如 # -3.11-64 # -3.10-64 # -3.9-64 # 在macOS/Linux上可以尝试 python3.9 --version python3.10 --version python3.11 --version确保你计划使用的几个版本都能被正确识别。有了多个基础解释器我们才能基于它们创建不同的虚拟环境。4. 核心操作三步创建并注册一个纯净的Python内核现在进入实战环节。假设我们有一个新项目需要基于Python 3.11创建一个独立的虚拟环境并让它立刻出现在VsCode的Jupyter内核列表里。我们完全在VsCode中完成。4.1 第一步在项目目录中创建虚拟环境首先在VsCode中打开或创建一个项目文件夹。然后打开内置终端Terminal - New Terminal。在终端中我们使用Python自带的venv模块来创建虚拟环境。这里有一个关键技巧使用py -3.11或python3.11这样的版本标识符来调用特定版本的Python解释器创建环境这样可以精确控制环境的Python版本。# Windows 示例在项目根目录下创建名为 .venv311 的虚拟环境基于Python 3.11 py -3.11 -m venv .venv311 # macOS/Linux 示例 python3.11 -m venv .venv311命令解释py -3.11/python3.11: 指定使用我们系统安装的Python 3.11解释器来执行后续命令。-m venv: 告诉Python运行venv模块。.venv311: 这是虚拟环境文件夹的名称。我习惯用.venv加版本号作为前缀点号开头在部分系统文件管理器中会默认隐藏比较整洁。执行成功后你会在项目目录下看到一个名为.venv311的文件夹里面包含了独立的Python解释器、pip以及一些基础库。4.2 第二步激活环境并安装ipykernel虚拟环境创建好后需要激活它这样后续的pip install命令才会将包安装到这个独立环境中而不是全局环境。# Windows (在VsCode的终端中如果是PowerShell) .\.venv311\Scripts\Activate.ps1 # 如果出现执行策略错误可以先运行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # 或者使用CMD方式激活 # .venv311\Scripts\activate.bat # macOS/Linux source .venv311/bin/activate激活后你的终端提示符前应该会出现环境名如(.venv311)这表明你当前正处在这个虚拟环境中。接下来安装最关键的两个包ipykernel和ipywidgets后者可选用于一些交互式组件。# 确保pip是最新版本 python -m pip install --upgrade pip # 安装 ipykernel这是将环境注册为Jupyter内核的核心包 pip install ipykernel # 可选安装 ipywidgets 以支持更丰富的交互式输出 pip install ipywidgets注意一定要在虚拟环境激活的状态下执行这些pip命令你可以通过检查which python(macOS/Linux) 或where python(Windows) 来确认当前python命令是否指向你的虚拟环境目录。4.3 第三步将当前环境注册为Jupyter内核这是将我们的虚拟环境“暴露”给Jupyter和VsCode的关键一步。ipykernel包提供了一个非常方便的命令行工具ipython kernel install。在当前激活的虚拟环境终端中运行以下命令python -m ipykernel install --user --namemy_python_311 --display-namePython 3.11 (My Project Env)让我们拆解这个命令的每个参数python -m ipykernel install: 使用当前环境下的python运行ipykernel的安装模块。--user: 将内核安装到当前用户目录下即我们之前提到的~/.local/share/jupyter/kernels/这样不需要管理员权限也不会影响系统其他用户。--namemy_python_311: 这是内核的内部标识符必须唯一。建议使用简短、无空格、带版本信息的名字便于管理。--display-namePython 3.11 (My Project Env): 这是在VsCode和Jupyter界面的内核列表中显示的名称。可以起一个更友好、更具描述性的名字方便区分。执行成功后这个命令会自动在你用户的Jupyter内核目录下创建一个名为my_python_311的文件夹并在其中生成我们之前提到的kernel.json文件其argv已经正确指向了你虚拟环境中的Python解释器。验证一下现在完全关闭并重新打开VsCode或者至少重新加载窗口。然后创建一个新的.ipynb文件或者打开一个已有的Notebook。点击VsCode右上角或状态栏上的“选择内核”按钮你应该能在列表里看到刚刚添加的Python 3.11 (My Project Env)。选择它你的Notebook就运行在这个全新的、纯净的虚拟环境下了。5. 进阶技巧内核管理、问题排查与最佳实践完成了基础配置你已经可以自由地为每个项目创建独立内核了。但要让这个工作流真正“优雅”还需要一些进阶技巧和避坑指南。5.1 内核的查看、删除与清理随着项目增多内核列表可能会变得杂乱。你需要知道如何管理它们。查看所有已注册的内核 在任意终端无需激活特定环境运行jupyter kernelspec list这会列出所有内核的名称及其配置文件所在的路径。你可以清晰地看到哪些是系统级的哪些是用户级的--user安装的以及它们对应的kernel.json文件位置。删除一个不再需要的内核 同样简单使用jupyter kernelspec remove命令。# 删除我们之前创建的名为 my_python_311 的内核 jupyter kernelspec remove my_python_311系统会要求你确认输入y即可。这个操作只会删除内核的注册信息即kernels目录下的对应文件夹不会删除你项目中的虚拟环境文件夹如.venv311。环境管理创建/删除和内核管理注册/注销是解耦的这非常清晰。一个常见的清理场景你删除了一个项目文件夹连同里面的.venv但忘记删除对应的内核注册。这时当你尝试在Jupyter中使用这个内核时会报错因为kernel.json里指向的Python解释器路径已经不存在了。定期运行jupyter kernelspec list并清理掉那些指向无效路径的内核是个好习惯。5.2 避坑指南为什么我的内核不生效在实际操作中你可能会遇到内核选择后无法运行代码或者依然在使用旧环境的情况。以下是几个常见原因和解决方案VsCode的Python扩展未正确识别环境 有时VsCode的Python扩展会缓存解释器列表。打开命令面板CtrlShiftP输入并选择Python: Select Interpreter确保你看到了你创建的虚拟环境如./.venv311/bin/python。如果没有可以尝试重启VsCode或者运行命令Developer: Reload Window。内核注册时使用了错误的Python路径 这通常发生在你没有在目标虚拟环境激活的状态下运行ipykernel install命令。请务必先激活环境再注册内核。你可以检查有问题的内核的kernel.json文件看argv中的路径是否指向了正确的虚拟环境bin/python或Scripts\python.exe目录。Notebook文件已关联了旧内核.ipynb文件内部会记录最后一次使用的内核信息。如果你更改了内核名称或者内核的display-name发生了变化Notebook可能无法自动关联到新内核。在VsCode中你可以手动点击选择内核或者通过编辑Notebook文件的元数据metadata来修复。更简单的方法是直接重新选择一次内核。权限问题多见于Windows 在Windows上如果你在VsCode的终端特别是PowerShell中激活虚拟环境或安装包时遇到权限错误可以尝试以管理员身份运行VsCode不推荐长期使用。修改PowerShell执行策略在管理员权限的PowerShell中运行Set-ExecutionPolicy RemoteSigned。或者简单点在VsCode的设置里将默认终端改为Command Prompt或Git Bash再试。5.3 最佳实践让多版本内核管理更轻松基于上述流程我总结了一套个人实践能让多Python版本、多项目环境的管理变得井井有条命名规范虚拟环境文件夹我统一使用.venv_项目简写_py版本的格式例如.venv_ml_311表示一个用于机器学习项目的Python 3.11环境。点号开头使其在文件浏览器中半隐藏减少干扰。内核名称--name使用k_项目简写_py版本例如k_ml_311。加上k_前缀在用jupyter kernelspec list查看时能一眼看出哪些是内核标识符与项目目录区分开。内核显示名--display-name使用更友好的描述如[ML-Proj] Python 3.11。加上项目标签在VsCode的下拉列表中一目了然。环境依赖固化 在虚拟环境中安装完所有项目依赖后记得生成requirements.txt文件。# 在激活的虚拟环境中 pip freeze requirements.txt将这个文件放入项目版本控制如Git。其他协作者或者未来的你只需要按照上述步骤创建同名虚拟环境并注册内核后运行pip install -r requirements.txt就能完全复现你的开发环境。利用VsCode工作区设置 对于长期项目你可以配置VsCode的工作区设置.vscode/settings.json让它默认使用该项目的虚拟环境。{ python.defaultInterpreterPath: ${workspaceFolder}/.venv_ml_311/bin/python, python.terminal.activateEnvironment: true }这样每次打开这个项目文件夹VsCode会自动选择正确的解释器并在打开终端时自动激活虚拟环境非常省心。为不同Python版本创建基础模板环境 如果你经常需要基于某个Python版本如3.11创建新环境并且这些环境都需要一些共同的底层包比如numpy,pandas,jupyter你可以先创建一个“模板”虚拟环境安装这些通用包然后以其为基准复制环境使用venv --copies或工具如conda create --clone但venv本身不直接支持克隆可以用python -m venv new_env --system-site-packages部分共享但更干净的做法还是老实重新安装。虽然不能直接克隆但维护一个通用的requirements_base.txt文件在新环境创建后首先安装它也能极大提升效率。6. 对比与延伸为什么不直接用Anaconda文章开头我们提到了要避开Anaconda。现在我们已经有了自己的方案不妨再深入对比一下这能帮助我们更好地理解自己工具链的优势和边界。Anaconda的方式 Anaconda通过conda命令统一管理环境和包。创建一个环境并注册为Jupyter内核通常一步到位conda create -n my_env python3.11 conda activate my_env conda install ipykernel # 内核通常会自动注册或者通过 python -m ipykernel install ...conda的优势在于非Python依赖管理它能处理一些用pip安装起来很棘手的二进制库依赖特别是在Windows上比如某些科学计算库的C扩展。环境克隆conda create --clone可以快速复制一个已有环境。丰富的预构建包通过conda-forge等渠道有大量优化过的预编译包。我们的纯venvipykernel方式 优势在于轻量venv是Python标准库的一部分无需安装任何额外发行版。环境目录小创建速度快。纯净完全基于官方的Python.org解释器和pip避免了与Anaconda自身复杂的路径和链接机制可能产生的冲突。你的环境是“标准”的Python环境。可控你对环境的构成有完全的控制权从解释器版本到每一个包都通过pip管理符合大多数Python社区和生产部署的惯例常用requirements.txt。与系统集成更好特别是在使用系统包管理器如Homebrew, apt安装Python时venv是更自然的选择。如何选择如果你的工作重度依赖数据科学、机器学习栈NumPy, SciPy, TensorFlow, PyTorch并且主要在Windows上工作Anaconda或Miniconda在初期可能帮你省去很多编译依赖的麻烦。如果你从事Web开发、自动化脚本、工具开发或者追求极简、可复现、与生产环境一致或者主要在macOS/Linux上工作那么本文的纯venv方案是更优雅、更推荐的选择。它让你更贴近Python的原生生态。事实上这两种方式并非完全互斥。你完全可以在Anaconda的基础上在某个conda环境里使用pip安装包注意潜在的冲突。也可以在我们的venv环境里通过pip安装绝大多数数据科学包对于复杂的二进制依赖可能需要预先安装一些系统开发工具如Windows上的Visual C Build Tools或macOS的Xcode Command Line Tools。7. 实战演练为一个数据分析项目配置专属内核让我们用一个完整的、真实的微型项目场景来串联所有步骤。假设我们要开始一个数据分析项目需要使用Python 3.10并安装pandas和matplotlib。创建项目目录并打开VsCodemkdir my_data_analysis cd my_data_analysis code . # 在终端中用此命令在当前位置打开VsCode在VsCode终端中创建并激活虚拟环境# 假设系统已安装Python 3.10 py -3.10 -m venv .venv_da_310 # Windows # 或 python3.10 -m venv .venv_da_310 # macOS/Linux # 激活环境 # Windows PowerShell .\.venv_da_310\Scripts\Activate.ps1 # macOS/Linux source .venv_da_310/bin/activate激活后终端提示符应变为(.venv_da_310)。安装项目依赖并注册内核# 升级pip python -m pip install --upgrade pip # 安装核心包和ipykernel pip install pandas matplotlib jupyter ipykernel ipywidgets # 将当前环境注册为Jupyter内核 python -m ipykernel install --user --namek_da_310 --display-nameData Analysis (Py 3.10)验证与使用在VsCode中新建一个文件命名为analysis.ipynb。VsCode会自动将其识别为Jupyter Notebook。点击Notebook界面右上角或状态栏的内核选择器你应该能看到Data Analysis (Py 3.10)。选择它。在第一个单元格输入import pandas as pd; print(pd.__version__)并运行应该能成功打印出版本号且该版本是你刚刚在虚拟环境中安装的。固化环境可选但推荐# 仍在激活的虚拟环境终端中 pip freeze requirements.txt现在你的项目目录下应该有.venv_da_310/文件夹和requirements.txt文件。将requirements.txt加入版本控制而.venv_da_310/通常被添加到.gitignore中。整个过程在几分钟内完成你得到了一个完全独立、干净、可复现的Python 3.10数据分析环境并且它与VsCode的Jupyter功能无缝集成。当你下次打开这个项目或者你的同事克隆了代码库他们只需要重复第2步创建同名venv、激活环境、pip install -r requirements.txt、然后注册内核如果内核名未注册过就能获得一模一样的开发体验。这个流程的优雅之处在于它的清晰和直接。没有黑盒每一步你都知道在做什么所有组件Python解释器、venv、pip、ipykernel、VsCode各司其职通过标准的接口和文件kernel.json,requirements.txt进行协作。它可能没有Anaconda那种“一键搞定”的魔法感但它给了你作为开发者最大的透明度和控制权而这正是构建稳定、可维护项目的基础。
返回列表