[英]pyinstaller fails to load a dll that is present
Windows 7 64位-Python 2.6 32位-Pymunk 4.0.0
好的,感谢通过Pyinstaller使用Pymunk 。 我花了很长时间,但现在我了解了如何使用Pyinstaller将想要的东西扔进exe。 但是,仍然无法加载特定的dll- chipmunk.dll
。 这是我的Pyinstaller的.spec文件。
# -*- 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 )
这所有的包都没问题。 只要我在exe旁边有dll,图像加载就可以了,所以我不会出错。 通过比较包含dll的版本之前和之后,我确认dll位于其中。 相差160 kb。 然后,我用它来检查在Pyinstallers exe环境下启动时dll是否在当前路径中。
try:
print os.listdir(sys._MEIPASS).count("chipmunk.dll"),"dlls"
except:
#not in pyinstaller
print 0,"dlls"
我在输出中得到了确切的1 dlls
,但是pymunk抱怨找不到它。 它在_MEIPASS PATH
目录中,所以pymunk怎么找不到它? 该dll位于根目录中,因此无需搜索。 如何让pymunk搜索正确的位置?
我认为这与pymunk冻结时如何尝试找到chipmunk.dll的路径有关。 当所有文件打包成一个文件时,显然需要特殊代码。 您可以用这个文件替换libload.py文件,然后重试: https ://gist.github.com/viblo/44ccd6af88d9f050403b
(目前,我不能自己尝试此操作,因此要点。如果可行,我将其提交给真正的pymunk回购)
这段代码似乎在加载DLL时通过搜索路径设置了较高的优先级。 您可以将其放在程序入口点的开头。
我有一个类似的问题,它对我有用:)
try:
import win32api
win32api.SetDllDirectory(sys._MEIPASS)
except:
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.