Jupyter Notebook导入gym报No module named 'ale_py._ale_py'错如何解决
问题表现
- Jupyter Notebook环境执行
import gym时触发模块导入错误 - 初始报错为
No Module named 'gym',手动通过sys.path.append()追加包搜索路径后,抛出ModuleNotFoundError: No module named 'ale_py._ale_py'错误 - 同一份代码在非Jupyter的原生Python环境下可正常运行,无上述报错
手动调整路径的代码片段:
import sys sys.path.append(path) import gym
触发的核心报错栈:
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ale_py/__init__.py in <module> 46 47 # Import native shared library ---> 48 from ale_py._ale_py import * ModuleNotFoundError: No module named 'ale_py._ale_py'
问题根因
报错的核心原因是Jupyter Notebook当前使用的Python解释器,和你能正常跑通gym代码的Python解释器不属于同一个环境。
手动追加sys.path的操作属于错误的临时方案:硬塞其他环境的site-packages路径后,纯Python实现的包可以被搜索到,但ale_py包含C/C++编译的二进制扩展模块,不同Python版本、不同编译环境生成的二进制文件不兼容,当前Jupyter所用的解释器无法加载其他环境下编译好的_ale_py二进制文件,最终抛出模块不存在的错误。
修复步骤
- 先定位能正常运行gym代码的Python解释器路径,在可以正常跑通代码的终端中执行对应命令:
- macOS/Linux系统执行:
which python3 - Windows系统执行:
where python
记录命令输出的完整解释器路径备用。
- macOS/Linux系统执行:
- 在该正常运行的Python环境中,安装并注册Jupyter内核:
# 先安装ipykernel依赖 pip install ipykernel # 将当前环境注册为Jupyter可选内核,--name后可自定义环境显示名 python -m ipykernel install --user --name=gym_rl_env - 删除代码中手动添加的
sys.path.append(path)相关逻辑,硬编码路径会持续引发二进制包兼容问题,无保留必要。 - 重启Jupyter Notebook,打开对应笔记本后将内核切换为刚才注册的
gym_rl_env,再执行导入即可正常运行。
可以在Jupyter单元格中执行以下代码验证解释器是否匹配,输出路径和第一步记录的路径完全一致即为配置正确:
import sys print(sys.executable)
内容的提问来源于stack exchange,提问作者Python_Krow
相关产品推荐
相关产品推荐

