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

Conda及pipenv环境无法与Jupyter正常适配,包导入与内核异常问题求助

问题概述

7月的某一天我发现Jupyter无法导入我安装在Conda环境中的Seaborn版本,它会从全局目录拉取旧版本的Seaborn,核查后发现其余所有包都存在该问题。经过多次修复尝试后,Jupyter现在甚至无法导入任何包,我切换到pipenv测试也出现了相同问题。在Conda和pipenv两种环境下,sys.path都显示了大量无法确认用途的路径变量,有时包含目标环境路径,有时不包含,但无论如何Jupyter的导入逻辑都会忽略我指定使用的环境路径,转而查找我为了解决该问题在7月就已经删除的全局包。除此之外(二者可能以我暂未理解的方式相互关联),我也无法获得能够将Jupyter连接到安装了对应包的目标环境目录的内核,Jupyter始终使用全局Python而非环境内的Python实例。我不太清楚内核的创建机制,但可以确定的是部分新环境没有生成对应内核、内核无法访问环境专属的Python和包,或是内核连接失败(加载过时的kernel.json文件后启动失败)。

预期解决效果

如何让JupyterLab从指定的环境目录中导入对应版本的包?更深层的需求是,如何让环境恢复之前的自动功能:[1] 创建自身专属的Python实例;[2] 创建可被Jupyter识别的专属内核;[3] 生成指向自身环境的路径;[4] 在Jupyter Lab中完成上述所有配置的初始化?

已尝试的解决方案

  • 停用base环境:诚然7月前几周我没有做该操作,后来才想起这是Windows下使用Conda的必要操作,但现在我已经常规停用base环境,问题却仍然存在。
  • 卸载Anaconda后重装Miniconda
  • 删除了设备上所有零散/旧版本的Python,重装了用户级的全新Python 3.9
  • 通过conda list命令核查确认包已成功安装,只是无法在JupyterLab中正常导入
  • 在Windows设置中调整过Path变量,但操作非常谨慎,不确定是否调整正确,毕竟3个月过去了问题仍然存在,也不清楚应该编辑用户变量还是系统变量,以及如何稳妥地裁剪路径。
  • 重装jupyter和jupyterlab
  • 重装ipykernel
  • 发现sys.executable、sys.path和!where python在shell的Python中与Jupyter Lab的Python中输出结果不一致
  • 在JupyterLab中手动切换内核(通常手动选择的内核无法正常启动)
  • 尝试在notebook中手动改写sys.path
  • 尝试从全新的pipenv而非Miniconda中启动JupyterLab
  • 8月时我曾在VS Code中使用原生Python让pipenv成功适配Streamlit小应用(这可能说明问题仅出在Jupyter侧?自7月JupyterLab出现问题后,我只能在Google Colab中继续开展基于Jupyter的项目)

更多细节

我筛选出了3个最典型的代码/报错片段,希望能帮助定位问题关键点。

[1]

当kernel-session.json导致内核无法启动时,该文件是完全空白的json文件。在conda终端运行jupyter lab时,输出内容中隐藏了如下报错:

Failed to load connection file:
'C:\Users\David.000\AppData\Roaming\jupyter\runtime\kernel-a6082e80-0b65-48f1-b370-7c2918030185.json'

我找到了过去可以正常启动内核的kernel-session.json文件,比如这个名为kernel-b146b600-81e3-418e-a55f-5a3fbbc13471.json的文件,自动填充的内容如下:

{
  "shell_port": 50877,
  "iopub_port": 50878,
  "stdin_port": 50879,
  "control_port": 50880,
  "hb_port": 50881,
  "ip": "127.0.0.1",
  "key": "caa915a4-00a599e8b6c4db6417bcca77",
  "transport": "tcp",
  "signature_scheme": "hmac-sha256",
  "kernel_name": ""
}

[2]

在shell的Python中运行sys.executable,输出的是环境内正确的Python路径:

>>> sys.executable
'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\python.exe'

但在Jupyter Lab中运行sys.executable,却指向了全局Python:

sys.executable
'C:\\Python39\\python.exe'

[3]

在shell的Python中运行sys.path,输出了我需要的环境专属路径(不过路径数量为什么这么多?)

>>> sys.path
    ['', 'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\python39.zip',
'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\DLLs',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\lib',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml',
    'C:\\Users\\David.000\\AppData\\Roaming\\Python\\Python39\\site-packages',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\lib\\site-packages',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\lib\\site-packages\\win32',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\lib\\site-packages\\win32\\lib',
    'C:\\Users\\David.000\\miniconda3\\envs\\aucu_ml\\lib\\site-packages\\Pythonwin']

但在Jupyter Lab中运行sys.path,也显示了大量路径,其中很多是不需要的全局路径:

sys.path
['C:\\Users\\David.000\\Desktop\\Civic Innovation Corps\\Miami\\Predictive_Analytics_Business_Licensing',
'C:\\Python39\\python39.zip',
'C:\\Python39\\DLLs',
'C:\\Python39\\lib',
'C:\\Python39',
'',
'C:\\Users\\David.000\\AppData\\Roaming\\Python\\Python39\\site-packages',
'C:\\Python39\\lib\\site-packages',
'C:\\Python39\\lib\\site-packages\\win32',
'C:\\Python39\\lib\\site-packages\\win32\\lib',
'C:\\Python39\\lib\\site-packages\\Pythonwin',
'C:\\Python39\\lib\\site-packages\\IPython\\extensions',
'C:\\Users\\David.000\\.ipython']

解决方案

第一步:清理残留Jupyter配置

删除C:\Users\David.000\AppData\Roaming\jupyter\kernels目录下所有文件,清除历史无效内核配置。同时清空C:\Users\David.000\AppData\Roaming\jupyter\runtime目录下的所有临时文件,解决空白kernel.json导致的启动失败问题。

第二步:为目标环境单独注册内核

激活需要使用的Conda环境aucu_ml,在环境终端执行以下命令:

pip install ipykernel
python -m ipykernel install --user --name aucu_ml --display-name "Python (aucu_ml)"

执行完成后会自动生成对应环境的内核配置,kernel.json将直接指向该环境的python.exe路径,无需手动修改。

第三步:规范Jupyter启动方式

不要在全局环境或base环境启动JupyterLab,每次使用前先激活对应Conda/pipenv环境,在环境终端执行jupyter lab启动,此时Jupyter会优先加载当前环境的配置,内核列表会自动显示已注册的环境内核。

第四步:修复路径优先级

编辑Windows用户变量的Path,将Miniconda的envs目录、对应环境的根目录、Scripts目录的排序提到全局Python 3.9路径之前;同时删除用户变量中冗余的全局Python路径引用,避免路径串扰。
如果仍出现sys.path包含全局路径的问题,在当前用户目录下新建.env文件,添加内容PYTHONPATH="",禁用全局site-packages的自动加载。

验证操作

启动JupyterLab后选择对应名称的内核,执行sys.executable确认路径指向环境内的python.exe,执行import seaborn; print(seaborn.__version__)验证包版本与conda list输出一致即可。


内容的提问来源于stack exchange,提问作者David d'Operazione

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:03