windows 上安装 mujoco_py

为了尝试一下 cs294 课程的作业,配环境配了一天多。

Deep RL Assignment 1: Imitation Learning Fall 2017 作业要求上一句轻描淡写:

  1. MuJoCo: We will use MuJoCo for physics simulation in this assignment. Download version 1.31 from mujoco.org and obtain a license from the course instructors. Note that we use version 1.31 and not the latest version 1.50. The python interface to mujoco bundled with OpenAI gym is also compatible with this version of mujoco.

前面一直出 bug 的是 gym:

Traceback (most recent call last):                                                                      
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 143, in spec       
    return self.env_specs[id]                                                                           
KeyError: 'Humanoid-v1'                                                                                 
                                                                                                        
During handling of the above exception, another exception occurred:                                     
                                                                                                        
Traceback (most recent call last):                                                                      
  File "run_expert.py", line 71, in <module>                                                            
    main()                                                                                              
  File "run_expert.py", line 37, in main                                                                
    env = gym.make(args.envname)                                                                        
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 167, in make       
    return registry.make(id)                                                                            
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 118, in make       
    spec = self.spec(id)                                                                                
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 151, in spec       
    raise error.DeprecatedEnv('Env {} not found (valid versions include {})'.format(id, matching_envs)) 
gym.error.DeprecatedEnv: Env Humanoid-v1 not found (valid versions include ['Humanoid-v2'])             

感谢最后一句的提醒,估计是什么更新了吧,v1没有了,我换成了 v2,这一句终于能过掉了。由于还没有装 mujoco,错误变成了:

(cs294hw1) C:\ProjectsData\machineLearning\ACMCourse2\cs294\homework\hw1>python run_expert.py experts\Humanoid-
v1.pkl Humanoid-v2 --render --num_rollouts 20                                                                  
loading and building expert policy                                                                             
obs (1, 376) (1, 376)                                                                                          
loaded and built                                                                                                                                                        
……(此处略去几十行)
Traceback (most recent call last):                                                                             
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\mujoco\mujoco_env.py", line 11, in <module>      
    import mujoco_py                                                                                           
ModuleNotFoundError: No module named 'mujoco_py'                                                               

安装 mujoco_py 和 mujoco

我开始安装 mujoco_py。据 博客 提示,1.3.1 mjpro对应的0.5.7py,我就去 pip3.5 install mujoco_py==0.5.7 ,一切顺利。

然后 import mujoco_py时,发生错误:

>>> import mujoco_py                                                                                           
Traceback (most recent call last):                                                                             
  File "<stdin>", line 1, in <module>                                                                          
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\__init__.py", line 2, in <module>             
    init_config()                                                                                              
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\config.py", line 33, in init_config             
    raise error.MujocoDependencyError('To use MuJoCo, you need to either populate ~/.mujoco/mjkey.txt and ~/.mujoco/mjpro131, or set the MUJOCO_PY_MJKEY_PATH and MUJOCO_PY_MJPRO_PATH environment variables appropriately. Follow the instructions on https://github.com/openai/mujoco-py for where to obtain these.')                      
mujoco_py.error.MujocoDependencyError: To use MuJoCo, you need to either populate ~/.mujoco/mjkey.txt and ~/.mujoco/mjpro131, or set the MUJOCO_PY_MJKEY_PATH and MUJOCO_PY_MJPRO_PATH environment variables appropriately. Follow the instructions on https://github.com/openai/mujoco-py for where to obtain these.                                                                                                   

好吧,我确实还没有找 key。我到官网注册了MuJoCo Pro Trial License: 30 days,从邮箱下载了 LICENSE.txtmjkey.txt。同时在官网 下载了mjpro131 win64,解压到了C:\Program Files\mujoco文件夹。我不仅把两个文件疯狂地复制到了C:\Program Files\mujocoC:\Program Files\mujoco\mjpro131 以及 C:\Program Files\mujoco\mjpro131\bin,系统环境变量也加进去了,如下图,(这里其实还写错了,KEY的应该具体到文件)结果还是不行。

系统环境变量

这都不行,issue里也搜索不到有帮助的信息,那,只能,去改掉报错的文件了(微笑)。我去看了文件C:\anaconda3\envs\cs294hw1\Lib\site-packages\mujoco_py\config.py,发现写道 _key_path = os.environ.get('MUJOCO_PY_MJKEY_PATH')
自己尝试这句话,果然是拿不到的。

(后来发现还是我蠢,我没有重启一下命令行,好像重开一个才会拿到新的环境变量= =这样的话应该是只要添加了环境变量就OK了)

C:\Users\shens                                                                            
λ python                                                                                  
Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information.                    
>>> import os                                                                             
>>> _key_path = os.environ.get('MUJOCO_PY_MJKEY_PATH')                                    
>>> print(_key_path)                                                                      
None                                                                                                                                     

然后下面给了 default 值竟然是按照 Linux 的写法写的,怪不得没有这个路径……为了杜绝后患,我把这一大段 if 不 if 的都改掉了,直接暴力赋值

    _key_path = os.path.expanduser('C:\\Program Files\\mujoco\\mjpro131\\bin\\mjkey.txt')
    mjpro_path = os.path.expanduser('C:\\Program Files\\mujoco\\mjpro131')

这下终于过了,不过报错变成了

(cs294hw1) C:\ProjectsData\machineLearning\ACMCourse2\cs294\homework\hw1>python                               
Python 3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 12:30:02) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.                                        
>>> import mujoco_py                                                                                          
Traceback (most recent call last):                                                                            
  File "<stdin>", line 1, in <module>                                                                         
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\__init__.py", line 4, in <module>              
    from .mjviewer import MjViewer                                                                            
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\mjviewer.py", line 7, in <module>              
    from . import mjcore, mjconstants, glfw                                                                   
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\mjcore.py", line 6, in <module>                
    from .mjlib import mjlib                                                                                  
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\mujoco_py\mjlib.py", line 21, in <module>                
    mjlib = cdll.LoadLibrary(os.path.abspath(libfile))                                                        
  File "C:\anaconda3\envs\cs294hw1\lib\ctypes\__init__.py", line 426, in LoadLibrary                          
    return self._dlltype(name)                                                                                
  File "C:\anaconda3\envs\cs294hw1\lib\ctypes\__init__.py", line 348, in __init__                             
    self._handle = _dlopen(self._name, mode)                                                                  
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。                                                                  

这次 stackoverflow拯救了我。按照高赞回答说的,修改掉一个文件名,顺便直接把系统标成 win 后,这位大爷终于不报错了(您这个库完全是按照 Linux 的文件系统写的,根本没有照顾过 win 的情绪好不好)。去跑了 mujoco 的示例模型,能跑出来了。

自带的humanoid.xml模型

收拾 gym

这时候我去运行题目, gym 又出问题了,

>>> import gym                                                                                           
>>> env = gym.make('Humanoid-v2')                                                                        
Traceback (most recent call last):                                                                       
  File "<stdin>", line 1, in <module>                                                                    
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 167, in make        
    return registry.make(id)                                                                             
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 119, in make        
    env = spec.make()                                                                                    
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\registration.py", line 86, in make         
    env = cls(**self._kwargs)                                                                            
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\mujoco\humanoid.py", line 12, in __init__  
    mujoco_env.MujocoEnv.__init__(self, 'humanoid.xml', 5)                                               
  File "C:\anaconda3\envs\cs294hw1\lib\site-packages\gym\envs\mujoco\mujoco_env.py", line 27, in __init__
    self.model = mujoco_py.load_model_from_path(fullpath)                                                
AttributeError: module 'mujoco_py' has no attribute 'load_model_from_path'                               

还好 github 上有两个 issue 244, 192,说使用python 3.6, mujoco 0.5.7 with the mjpro131 package installed and gym 0.9.1这一整套配置就可以了。我惊喜地发现我默认安装了gym 0.10.5,我改成pip install gym==0.9.1,终于 work 了……

小人夕阳下的奔跑,是我配环境逝去的一天

现在我已经没有耐心写作业了,手动再见……

下午更新

我想用 jupyter 写作业,发现那边虚拟环境还要配置。参考了简书文章的后半部分,

# 安装ipykernel 库
conda install -n cs294hw1 ipykernel
# (在虚拟环境中)注册环境
python -m ipykernel install --user

应该是我遗漏了参数,这个环境被命名为 python3 了,我去C:\Users\shens\AppData\Roaming\jupyter\kernels\python3中找 json 文件改了一下。好啦开始写作业。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容