升级Python后遇ModuleNotFoundError:skrub模块无法导入
问题描述
- 原环境:Jupyter Lab + Python 3.9
- 需求:安装skrub(scikit-learn扩展库,要求Python 3.10及以上),因此安装了Python 3.12.2
- 异常情况:
- 在Jupyter中用
! python --version确认当前为Python 3.12.2,执行!pip install skrub显示安装成功,但执行from skrub import TableVectorizer时触发ModuleNotFoundError: No module named 'skrub' - 此前在Python 3.9环境下执行魔法命令安装skrub时,出现错误:
ERROR: Ignored the following versions that require a different python version: 0.1.0 Requires-Python >=3.10 ERROR: Could not find a version that satisfies the requirement skrub (from versions: none) ERROR: No matching distribution found for skrub
- 在Jupyter中用
- 疑问:是否需要完全卸载Python 3.9?如何解决模块找不到的问题?
解决办法
无需卸载Python 3.9,问题核心是Jupyter当前使用的Kernel仍为Python 3.9,但!pip install将skrub装到了Python 3.12的环境中,两者路径不匹配导致找不到模块。具体步骤如下:
确认当前Kernel的Python路径
在Jupyter笔记本中执行以下代码,查看当前Kernel实际使用的Python路径:import sys print(sys.executable)如果输出路径指向Python 3.9的安装目录,说明Kernel未切换到3.12。
给Python 3.12添加Jupyter Kernel
打开Windows命令提示符(CMD),找到Python 3.12的可执行文件路径(例如默认路径为C:\Python312\python.exe),执行以下命令:# 给Python3.12安装ipykernel依赖 C:\Python312\python.exe -m pip install ipykernel # 将Python3.12注册为Jupyter的Kernel C:\Python312\python.exe -m ipykernel install --user --name=python312 --display-name="Python 3.12"切换Jupyter Kernel到Python 3.12
在Jupyter Lab界面右上角,点击当前的Kernel名称(例如显示为"Python 3"),选择「Change Kernel」,然后在列表中选择刚添加的「Python 3.12」。验证并测试
切换Kernel后,依次执行以下代码确认:# 确认Python版本 !python --version # 重新安装skrub(或直接导入,若之前已装到3.12路径可跳过) !pip install skrub # 导入模块测试 from skrub import TableVectorizer
补充说明
- 保留Python 3.9完全没问题,可用于兼容其他依赖旧版本Python的项目,只需在Jupyter中切换对应Kernel即可。
- 之前
!pip install看似成功,是因为!python调用的是系统PATH中优先级更高的Python 3.12,但Jupyter Kernel仍在使用3.9的环境,两者的包安装目录相互独立。
内容的提问来源于stack exchange,提问作者JCF
相关产品推荐
相关产品推荐

