2013-02-16 9 views
0

Я буквально не нашел ничего, что могло бы помочь googling. Даже для py2exe, но я бы хотел использовать pyinstaller.Использование Pymunk с Pyinstaller

Моя проблема в том, что модуль (pymunk [aka Chipmunk]) не полностью включен в сборку exe. Вероятно, у него есть какая-то dll. В принципе, его недостающая зависимость я не знаю, как ее решить.

Failed to load pymunk library. 

This error usually means that you don't have a compiled version of chipmunk in 
the correct spot where pymunk can find it. pymunk does not include precompiled 
chipmunk library files for all platforms. 

The good news is that it is usually enough (at least on *nix and OS X) to 
simply run the compile command first before installing and then retry again: 

You compile chipmunk with 
> python setup.py build_chipmunk 
and then continue as usual with 
> python setup.py install 
> cd examples 
> python basic_test.py 

(for complete instructions please see the readme file) 

If it still doesnt work, please report as a bug on the issue tracker at 
http://code.google.com/p/pymunk/issues 
Remember to include information about your OS, which version of python you use 
and the version of pymunk you tried to run. A description of what you did to 
trigger the error is also good. Please include the exception traceback if any 
(usually found below this message). 

Traceback (most recent call last): 
    File "<string>", line 2, in <module> 
    File "C:\python26\lib\site-packages\PyInstaller\loader\iu.py", line 386, in importHook 
    mod = _self_doimport(nm, ctx, fqname) 
    File "C:\python26\lib\site-packages\PyInstaller\loader\iu.py", line 480, in doimport 
    exec co in mod.__dict__ 
    File ".\build\pyi.win32\CollisionUtil\out00-PYZ.pyz\pymunk", line 53, in <module> 
    File "C:\python26\lib\site-packages\PyInstaller\loader\iu.py", line 431, in importHook 
    mod = self.doimport(nm, ctx, ctx + '.' + nm) 
    File "C:\python26\lib\site-packages\PyInstaller\loader\iu.py", line 480, in doimport 
    exec co in mod.__dict__ 
    File ".\build\pyi.win32\CollisionUtil\out00-PYZ.pyz\pymunk._chipmunk", line 14, in <module> 
    File ".\build\pyi.win32\CollisionUtil\out00-PYZ.pyz\pymunk.libload", line 68, in load_library 
    File ".\build\pyi.win32\CollisionUtil\out00-PYZ.pyz\ctypes", line 431, in LoadLibrary 
    File ".\build\pyi.win32\CollisionUtil\out00-PYZ.pyz\ctypes", line 353, in __init__ 
WindowsError: [Error 126] The specified module could not be found 

Бурундук Библиотека была обернута через модуль ctypes так, насколько эти сообщения от Бурундук это при условии, что это компилируется. Что не помогает мне в Python. Возможно, нет.

Может ли кто-нибудь сказать мне, как исправить эту зависимость для pyinstaller?

ответ

3

Вам необходимо включить файл chipmunk.dll (и если вы хотите запустить его в osx файле .dylib и для Linux-файлов .so). Один быстрый хакерский вариант - просто вручную скопировать его туда, где находится ваш сгенерированный файл .exe. Другой вариант - заставить pyinstaller включить его для вас. Я не эксперт в pyinstaller, но один из способов сделать это - отредактировать файл .spec, который создает pyinstaller.

Что-то вроде:

import os, pymunk 
pymunk_dir = os.path.dirname(pymunk.__file__) 
chipmunk_libs = [ 
    ('chipmunk.dll', os.path.join(pymunk_dir, 'chipmunk.dll'), 'DATA'), 
] 
#... 
coll = COLLECT(exe, 
       a.binaries + chipmunk_libs, 
       a.zipfiles, 
       a.datas, 
       strip=None, 
       upx=True, 
       name=os.path.join('dist', 'basic_test')) 

Я создал полный пример и совершил его pymunk ствол. Взгляните на https://github.com/viblo/pymunk/blob/master/examples/pyinstaller_basic_test.spec (обратите внимание, что в этом примере есть немного хакерства путей в начале, где он выполняет sys.path.insert (0, '..'). Учитывая, что ваша программа уже может найти pymunk, и вы поместили спецификацию файл в том же месте вам не понадобится эта часть.

+0

LOL. Я бы не отправил этот вопрос, если бы нашел, что dll я искал. Пришел к выводу, что его не было. Я просто нашел его правильным перед проверкой обновлений StackExchance XD. Я поставил его рядом с exe, и все хорошо. Спасибо за этот пример, я обязательно попробую. – Kaliber64

Смежные вопросы