我几乎找不到任何可以帮助的谷歌搜索。即使对于py2exe,我也想使用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
Chipmunk库是通过ctypes模块封装的,因此这些消息来自Chipmunk它假设它正在编译。从Python的角度来看,这对我没有帮助。也许不是。
有谁能告诉我如何修复pyinstaller的这种依赖?
答案 0 :(得分:3)
您需要包含chipmunk.dll文件(如果您想在osx上运行它.dylib文件,并为Linux运行.so文件)。一个快速的hacky选项是手动将其复制到生成的.exe文件所在的位置。另一个选择是让pyinstaller为你包含它。我不是pyinstaller的专家,但是一种方法是编辑pyinstaller创建的.spec文件。
类似的东西:
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 trunk。看看https://github.com/viblo/pymunk/blob/master/examples/pyinstaller_basic_test.spec(注意,这个例子在开始时有一点路径hackery,它处理sys.path.insert(0,'..')。鉴于你的程序已经可以找到pymunk和你将spec文件放在同一个地方你不需要那个部分。
答案 1 :(得分:3)
我在使用 pyinstaller 和 pymunk==6.0.0 时遇到了同样的问题
解决办法是将pymunk文件夹中的_chipmunk.pyd文件重命名为chipmunk.dll。
根据此答案,它们是相同的文件类型,但具有不同的扩展名,此解决方法使编译器能够定位文件并完成其任务。 https://stackoverflow.com/questions/8262884/python-c-extension-use-extension-pyd-or-dll#:~:text=4%20Answers&text=pyd%20files%20are%20just%20dll,from%20normal%20dlls%2C%20I%20recommend%20.&text=dll%20in%20windows。