使用mujoco-py包的MuJoCo物理库的Python绑定

7

我想使用MuJoCo (http://www.mujoco.org/),这是一个具有Python绑定的先进物理模拟器(https://github.com/openai/mujoco-py)。

我已经获得了我的MuJoCo许可文件mjkey.text,并相应地添加了所需的路径MUJOCO_PY_MJKEY_PATH、MUJOCO_PY_MJPRO_PATH到环境变量中。

MUJOCO_PY_MJPRO_PATH = C:\Dropbox\PhD\MuJoCo\mjpro131
MUJOCO_PY_MJKEY_PATH = C:\Dropbox\PhD\MuJoCo\mjpro131\bin

然而,当我想使用以下简单代码导入库时:
import mujoco_py

我收到了以下错误信息。
C:\Dropbox\Python\Anaconda\python.exe
C:/Dropbox/PhD/Python/X/MujocoHelloWorld/test.py
Traceback (most recent call last):
  File "C:/Dropbox/PhD/Python/X/MujocoHelloWorld/test.py", line 1, in <module>
    import mujoco_py
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
  File "C:\Dropbox\Python\Anaconda\lib\site-packages\mujoco_py-0.5.4-py3.5.egg\mujoco_py\__init__.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
  File "C:\Dropbox\Python\Anaconda\lib\site-packages\mujoco_py-0.5.4-py3.5.egg\mujoco_py\mjviewer.py", line 7, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
  File "C:\Dropbox\Python\Anaconda\lib\site-packages\mujoco_py-0.5.4-py3.5.egg\mujoco_py\mjcore.py", line 6, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
  File "C:\Dropbox\Python\Anaconda\lib\site-packages\mujoco_py-0.5.4-py3.5.egg\mujoco_py\mjlib.py", line 21, in <module>
  File "C:\Dropbox\Python\Anaconda\lib\ctypes\__init__.py", line 425, in LoadLibrary
    return self._dlltype(name)
  File "C:\Dropbox\Python\Anaconda\lib\ctypes\__init__.py", line 347, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application

Process finished with exit code 1

我正在使用 Windows 7 64 位操作系统上的 Python 3.5.1 64 位版本,同时安装了 MuJoCo 1.31 64 位版本。

我猜测问题是由于某种不兼容性引起的,我还尝试过在 Python 3.5.2 32 位版本和 MuJoCo 1.31 32 位版本之间进行组合。甚至,我尝试了非逻辑的 32 位 Python 和 64 位 MuJoCo 的组合,以及相反情况。

MuJoCo 库中提供的已编译示例“simulate.exe”可以完美运行。因此,我猜测我拥有的 64 位 MuJoCo 库没有问题。(顺便说一下,32 位版本无法在 64 位 Windows 上运行)

因此,问题可能发生在将 C++ 库加载到 Python 上时。我进行了调试并至少检查了 mujoco_py 库中的 Python 代码,它尝试从正确的路径加载“mujoco131.lib”(虽然不是“mujoco131.dll”)。然后出现错误,代码无法继续运行。

我欢迎任何评论和建议...

祝好!愉快的一天!

1个回答

7
尝试编辑mjlib.py,将加载器中的"bin/mujoco131.lib"替换为"bin/mujoco131.dll"
我还必须在platname_targdir.py中明确指定platname = "win"

这些更改实际上有助于避免错误。 非常感谢。但是,现在导入过程仅仅是挂起了,没有任何错误信息。print("hey") import mujoco_py print("hey")该代码会打印出第一个“hey”,然后一直无限运行下去。您还有其它想法吗? - Orhan Sönmez
你可能想尝试通过 conda install python=3.4 降级到 Python 3.4。 conda install mingw libpython numpy - haversine
谢谢建议,但还是不起作用。我猜测这可能是一个配置问题。如果它对你有效,能否写下依赖库的版本或更多想法? :D - Orhan Sönmez
我在mjcore.py的register_license()函数中将result = mjlib.mj_activate(file_path)更改为result = mjlib.mj_activate(file_path + '\\mjkey.txt')。看起来它正在工作。感谢您的所有帮助。 - Orhan Sönmez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接