Conda 与 Python 虚拟环境

Jupyter Notebook ipykernel 内核

背景:

Jupyter 在一个名为 kernel 的单独进程中运行用户的代码。kernel 可以是不同的 Python 安装在不同的 conda 环境或虚拟环境,甚至可以是不同语言(例如 Julia 或 R)的解释器。

简而言之,如何使用 conda 环境和 Jupyter 有三种选择:

要在Anaconda Prompt中创建虚拟环境并使其内核直接出现在Jupyter Notebook中,需通过ipykernel将环境与Jupyter内核关联。以下是具体步骤及原理分析:

配置conda环境的流程说明(原则!原则!)

  • 正确流程:激活环境安装ipykernel注册内核
# 激活环境
conda activate 环境名

image-20250430150735782

# 在激活的环境下安装内核
pip install ipykernel

这个命令注册了一个名为my-python3-kernel新内核,并将其与活动虚拟环境相关联。可以将my-python3-kernbel替换任何其他的名称。选择内核时,此名称将显示在Jupyter Notebook界面中。

python -m ipykernel install --user --name=my-python3-kernel

之后就能在Jupyter Notebook的中看到创建的内核了

IWmQp.png

注:如果想移除Kernel,可以使用以下命令:

1 查看所有的kernel

jupyter kernelspec list

2 删除你想删除的kernel

jupyter kernelspec uninstall my-python3-kernel

以上的方法每新建一个环境,就要重复操作一次。所以我选择一步到位自动注册内核。

使用插件nb_conda_kernels一步到位也就是省略了需要每安装一个虚拟环境都需要注册一个内核的步骤,插件会自动帮你管理和注册内核,适合多环境管理或者团队协作项目。

打开Anaconda prompt,在终端base环境下输入以下两行命令:

conda install nb_conda
conda install nb_conda_kernels
  1. conda install nb_conda 的作用
    功能:nb_conda 是一个Conda插件,允许在Jupyter Notebook中直接通过界面管理Conda环境(如创建、删除环境)。
    效果:
    安装后,Jupyter Notebook会新增一个 “Conda” 标签页(通常在主页的右上角)。
    在此标签页中,可以直接查看、激活、导出或删除Conda环境,无需使用终端。
    注意:
    此包仅在Jupyter Lab 3.0以下版本或Jupyter Notebook中有效。若使用Jupyter Lab 3.0+,需要改用 conda install -c conda-forge jupyterlab_conda
    如果仅在base环境安装,其他虚拟环境不会自动继承此功能。

  2. conda install nb_conda_kernels 的作用
    功能:nb_conda_kernels 是一个Jupyter插件,用于自动检测所有已安装的Conda环境,并将它们显示为可用的Jupyter内核。
    效果:
    安装后,Jupyter Notebook/Lab的内核列表中会自动包含所有满足以下条件的Conda环境:
    环境必须安装了 ipykernel(通过 conda install ipykernel)。
    环境不能是隐藏环境(即名称不能以 . 开头)。
    例如,如果有一个名为 myenv 的环境且安装了 ipykernel,启动Jupyter后可直接选择 myenv 内核。
    注意:
    无需手动执行 python -m ipykernel install,内核会自动注册。
    如果环境中未安装 ipykernel,该环境不会出现在内核列表中。

  3. 在base环境运行这些命令的影响
    安装位置:nb_conda 和 nb_conda_kernels 会被安装到base环境中,但它们的功能是全局生效的(即对所有Jupyter实例有效)。
    依赖关系:
    这两个包会引入额外的依赖(如ruamel.yaml、python等),可能导致base环境变得臃肿。
    如果后续卸载它们,需注意是否会影响其他包的依赖链。
    版本兼容性:
    确保Conda和Jupyter版本兼容。若遇到问题,可尝试执行:
    conda update conda jupyter nb_conda_kernels

  4. 运行 jupyter kernelspec list 会发生什么
    行为:无论当前处于哪个环境,此命令会列出所有已注册的Jupyter内核(包括手动注册的和nb_conda_kernels自动检测的)。
    输出示例:
    Available kernels: myenv C:\Users\user\AppData\Roaming\jupyter\kernels\myenv python3 C:\ProgramData\Anaconda3\share\jupyter\kernels\python3

注意:
如果内核路径指向其他环境的Python解释器(如myenv),即使当前在base环境,启动该内核时仍会使用目标环境的依赖。
如果某个内核无法启动,检查其对应的kernel.json文件中的Python路径是否正确。

  1. 常见问题与解决
  • 问题1:安装了 nb_conda_kernels,但Jupyter中仍看不到某些环境
    原因:目标环境未安装 ipykernel。
    解决:在目标环境中执行:
    conda activate target_env
    conda install ipykernel
    运行

  • 问题2:内核启动失败,报错 No module named ‘ipykernel’
    原因:内核指向的环境未安装 ipykernel,或路径错误。
    解决:
    在目标环境安装 ipykernel。
    手动修复内核路径:
    jupyter kernelspec remove wrong_kernel_name
    python -m ipykernel install --user --name correct_env --display-name "Fixed Env"

  • 问题3:nb_conda 标签页未显示
    原因:Jupyter版本不兼容或未正确安装。
    解决:
    conda remove nb_conda
    conda install -c conda-forge jupyterlab_conda # 如果是Jupyter Lab 3.0+
    ————————————————

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

​ 原文链接:https://blog.csdn.net/ytoomob/article/details/145926865

image-20250430194140728

常用命令

# 激活环境
conda activate 环境名

#创建一个名为my-python3-env的虚拟环境并指定所用Python的版本号及创建该环境时一起下载的包(本例中是pymysql、pymongo)
conda create -n my-python3-env python=3.7 pymysql pymongo

# 查看当前安装的虚拟环境及其位置
conda info --envs 或 conda env list

# 显示conda版本号
conda -V

# 无论当前处于哪个环境,此命令会列出所有已注册的Jupyter内核(包括手动注册的和nb_conda_kernels自动检测的)
jupyter kernelspec list

# 使用内核名称执行删除命令
# 操作前需关闭所有Jupyter进程,否则可能因文件占用导致删除失败。
# 删除后,kernelspec目录中对应文件夹会被移除,但Conda环境仍存在于conda/envs/myenv中。
jupyter kernelspec remove myenv(内核名)

# 卸载 nb_conda_kernels
conda remove nb_conda_kernels

# 卸载 nb_conda
conda remove nb_conda

# 验证卸载结果,若输出为空,表示卸载成功。
conda list | grep "nb_conda"

# nb_conda_kernels 会根据Conda环境自动生成内核,卸载插件后需手动删除这些内核:
# 列出所有内核(包含自动生成的内核)
jupyter kernelspec list
# 删除与Conda环境关联的内核(例如名为 "conda-root" 或环境名对应的内核)
jupyter kernelspec remove <kernel-name>

# 删除Jupyter的缓存目录(路径可能因系统而异):
# Windows
rmdir /s /q "%APPDATA%\jupyter\kernels"
# Linux/macOS
rm -rf \~/.local/share/jupyter/kernels

# 如果卸载后Jupyter无法正常显示内核,需重新注册base环境的内核:
# 激活base环境(默认已激活)
conda activate base
# 注册base环境的内核(可选)
python -m ipykernel install --user --name python3 --display-name "Python 3 (base)"

#注意!!!!卸载后,新创建的Conda环境需手动注册内核:
conda activate myenv
conda install ipykernel
python -m ipykernel install --user --name myenv

# 导出 environment_name.yml 文件(迁移环境时用)(新电脑和当前电脑具有不同的平台和操作系统)
conda env export > environment.yml

# 在新电脑上,利用生成的environment_name.yml 文件复现环境
conda env create -f environment.yml

image-20250430150735782