2016-08-04 13 views
7

Chcę używać MuJoCo (http://www.mujoco.org/), zaawansowanego symulatora fizyki z powiązaniami z pythona (https://github.com/openai/mujoco-py).Wiązanie w Pythonie dla biblioteki fizyki MuJoCo przy użyciu pakietu mujoco-py

Mam mój plik licencji MuJoCo mjkey.text i odpowiednio dodałem wymagane ścieżki MUJOCO_PY_MJKEY_PATH, MUJOCO_PY_MJPRO_PATH do zmiennych środowiskowych.

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

jednak szybko, jak chcę zaimportować libray z poniższego prostego kodu,

import mujoco_py 

mam następujący komunikat o błędzie.

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 

Używam Python 3.5.1 64-bit na Windows 7 64-bit z MuJoCo 1.31 64-bit.

Domyślam się, że problem jest spowodowany pewną niezgodnością. Próbowałem też 32-bitowego 32-bitowego Python 3.5.2 z 32-bitowym MuJoCo. Próbowałem nawet nielogicznej 32-bitowej kombinacji Python i 64-bitowej MuJoCo i na odwrót.

Już skompilowany dany przykład "simulate.exe" w bibliotece MuJoCo działa doskonale. Myślę więc, że nie ma problemu z 64-bitową biblioteką MuJoCo, którą mam. (Nawiasem mówiąc, 32-bitowa wersja nie działa w 64-bitowym systemie Windows)

Problem prawdopodobnie powinien wystąpić podczas ładowania biblioteki C++ do Pythona. Debugowałem i przynajmniej sprawdziłem, czy kod Pythona w bibliotece mujoco_py próbuje załadować "mujoco131.lib" (nie "mujoco131.dll") z poprawnej ścieżki. A następnie pojawia się błąd i kod nie działa dalej.

Jestem otwarty na wszelkie uwagi i sugestie ..

Cheers! I miłego dnia!

Odpowiedz

4

Spróbuj edytować mjlib.py, zastępując "bin/mujoco131.lib" w "bin/mujoco131.dll" w module ładującym.

miałem też jednoznacznie określić platname = "win" w platname_targdir.py

+0

Zmiany rzeczywiście pomogły uniknąć błędu (ów). Wielkie dzięki. Ale teraz import po prostu zawiesza się bez żadnego błędu. 'print ("hej")' 'mujoco_py' import ' print ("hej") ' Ten kod drukuje pierwszy "hej", a następnie utrzymuje się na prowadzeniu na zawsze .. Jakiekolwiek dalsze pomysły? –

+0

Możesz spróbować zmienić klasyfikację na Pythona 3.4 za pomocą 'conda install python = 3.4' ' conda install mingw libpython numpy' – haversine

+0

Dzięki za sugestię, ale nadal nie działa. Myślę, że to jest problem z konfiguracją. Jeśli to działa, możesz zapisać wersje zależnych bibliotek. Lub więcej pomysłów? : D –

Powiązane problemy