MAC+IDLE环境下已装pygame与gymnasium[classic-control]仍报错求助
CartPole-v1渲染窗口报错排查(已安装依赖仍无法解决)
刚学习OpenAI Gymnasium,以CartPole-v1为入门案例编写代码,想要显示游戏窗口时出现以下报错:
Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/envs/classic_control/cartpole.py", line 223, in render import pygame ModuleNotFoundError: No module named 'pygame' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/artemnikoan/Documents/CartPole-v1.py", line 9, in <module> state = env.reset() File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/wrappers/time_limit.py", line 75, in reset return self.env.reset(**kwargs) File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/wrappers/order_enforcing.py", line 61, in reset return self.env.reset(**kwargs) File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/wrappers/env_checker.py", line 57, in reset return env_reset_passive_checker(self.env, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/utils/passive_env_checker.py", line 186, in env_reset_passive_checker result = env.reset(**kwargs) File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/envs/classic_control/cartpole.py", line 209, in reset self.render() File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/gymnasium/envs/classic_control/cartpole.py", line 226, in render raise DependencyNotInstalled( gymnasium.error.DependencyNotInstalled: pygame is not installed, run `pip install gymnasium[classic-control]`
已确认pygame和gymnasium[classic-control]均已安装,运行环境为Mac电脑+IDLE编辑器,且已安装PyTorch及其他所需模块,代码如下:
import os import gymnasium as gym from stable_baselines3 import PPO from stable_baselines3.common.vec_env import DummyVecEnv from stable_baselines3.common.evaluation import evaluate_policy env=gym.make('CartPole-v1',render_mode='human') episodes = 5 for episode in range(1, episodes+1): state = env.reset() done = False score = 0 while not done: env.render() action = env.action_space.sample() n_state, reward, done, truncated, info = env.step(action) score+=reward print('Episode:{} Score:{}'.format(episode, score)) env.close() log_path=os.path.join('Training', 'Logs') env = gym.make(environment_name) env = DummyVecEnv([lambda: env]) model = PPO('MlpPolicy', env, verbose = 1) model.learn(total_timesteps=10000) PPO_path = os.path.join('Training', 'Saved Models', 'PPO_model') model.save(PPO_path) model = PPO.load(PPO_path, env=env) evaluate_policy(model, env, n_eval_episodes=10, render=True)
可能的原因及解决方法:
- Python环境不一致:IDLE使用的解释器和安装依赖时的pip不属于同一环境。在IDLE中执行
import sys; print(sys.executable)获取当前解释器路径,然后用该路径对应的pip重新安装依赖,比如:/Library/Frameworks/Python.framework/Versions/3.11/bin/pip install gymnasium[classic-control] pygame - IDLE加载问题:IDLE有时无法识别新安装的包,尝试重启IDLE后再运行代码。
- 依赖安装不完整:可能因网络问题导致安装中断,尝试卸载后重装:
pip uninstall -y pygame gymnasium pip install gymnasium[classic-control] - 代码语法错误:代码中
env = gym.make(environment_name)一行的environment_name未定义,需改为'CartPole-v1',且需添加render_mode='human'参数,否则后续评估阶段渲染也会失败,修正后应为:env = gym.make('CartPole-v1', render_mode='human')
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

