64-разрядная версия Windows 7 - 32-разрядная версия Python 2.6 - Pymunk 4.0.0
Хорошо, спасибо Использование Pymunk с Pyinstaller. Это заняло у меня много времени, но теперь я понимаю, как закинуть все, что захочу, в exe с помощью Pyinstaller. Однако конкретная библиотека DLL, которая есть, по-прежнему не загружается chipmunk.dll
. Вот мой файл .spec для Pyinstaller.
# -*- mode: python -*-
a = Analysis(['Mesh_Animator.py'],
pathex=['C:\\Users\\username\\workspace\\2D_Mesh_Animator'],
hiddenimports=[],
hookspath=None)
import os, pymunk
pymunk_dir = os.path.dirname(pymunk.__file__)
chipmunk_libs = [
('chipmunk.dll', os.path.join(pymunk_dir, 'chipmunk.dll'), 'BINARY'),
]
a.datas+=[('imagetest.jpg','imagetest.jpg','DATA')]
a.binaries+=chipmunk_libs
#or just
#a.binaries+=[('chipmunk.dll','chipmunk.dll','BINARY')]
#both seem to work the say way
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'Mesh_Animator.exe'),
debug=False,
strip=None,
upx=True,
console=True )
Это все пакеты без проблем. Изображение загружается нормально, пока у меня есть DLL рядом с exe, поэтому я не ошибаюсь. Я подтвердил, что dll была в наличии, сравнив версии до и после включения dll. Разница в 160 кб. Затем я использовал это, чтобы проверить, находится ли dll по текущему пути при запуске в среде Pyinstallers exe.
try:
print os.listdir(sys._MEIPASS).count("chipmunk.dll"),"dlls"
except:
#not in pyinstaller
print 0,"dlls"
На выходе я получаю точное 1 dlls
, но пимунк жалуется, что не может его найти. Он находится в директории _MEIPASS PATH
, так почему же пимунк не может его найти? DLL находится в корне, поэтому поиск не требуется. Как заставить пимунка искать нужное место?