问题描述
我尝试打包一个使用 pylab 进行绘图的小脚本.我在Linux下使用pyinstaller没问题,但是在Windows 7下却出现错误.在装有PySide但没有安装PyQt的另一台计算机上,包装工作正常.因此,通过删除PyQt,我可以在其他计算机上使用它.但是,我想知道是否还有其他方法可以解决此问题,因为我有一些使用PyQt的脚本和一些使用PySide的脚本.我在使用 cx_freeze 时遇到了类似的错误.
I tried to package a small script which does some plotting with pylab. I used pyinstaller under Linux without a problem but under Windows 7 I get an error. On a different computer which has PySide but not PyQt installed the packaging worked. Thus by removing PyQt I can get it to work on my other computer. However, I would like to know if there is another way around this problem since I have some scripts which use PyQt and some which use PySide. I got a similar error by using cx_freeze.
感谢您的帮助,丹尼尔
显示问题的示例代码:
from pylab import *
labels = 'Cakes', 'Cookies', 'Biscuits', 'Tarts'
fracs = [27, 33, 14, 19]
pie(fracs, labels=labels, autopct='%1.1f%%', startangle=90)
show()
执行打包程序时产生错误:
Produced error executing the packaged program:
WARNING: file already exists but should not: C:\Users\..\Temp\_MEI61562\Include\pyconfig.h
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\Workspace\ZLC_python\build\test\out00-PYZ.pyz\pylab", line 1, in <module>
File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\Workspace\ZLC_python\build\test\out00-PYZ.pyz\matplotlib.pylab", line 269, in <module>
File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\Workspace\ZLC_python\build\test\out00-PYZ.pyz\matplotlib.pyplot", line 93, in <module>
File "C:\Workspace\ZLC_python\build\test\out00-PYZ.pyz\matplotlib.pyplot", line 80, in _backend_selection
File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 409, in load_module
module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
ImportError: DLL load failed: The specified procedure could not be found.
按照 Pyinstaller的建议进行操作-导入scipy或scipy.signal时-onefile警告pyconfig.h 我摆脱了警告,但错误仍然存在.
By following the suggestions from Pyinstaller --onefile warning pyconfig.h when importing scipy or scipy.signal I got rid of the warning but the error remains.
版本:
- Python 2.7.5
- PySide 1.2.1
- PyQt 4.9.6-3
- matplotlib 1.2.1
- numpy 1.7.1
- pyinstaller 2.1
推荐答案
我仔细查看了pyinstaller文档,并找到了pyinstaller的解决方案.我在spec文件的Analysis块中使用了excludes选项:
I had a closer look at the pyinstaller documentation and found a solution for pyinstaller. I used the excludes option in the Analysis block of the spec file:
# -*- mode: python -*-
a = Analysis(['test.py'],
pathex=['C:\\Workspace\\ZLC_python'],
hiddenimports=[],
hookspath=None,
excludes=['PyQt4'],
runtime_hooks=None)
for d in a.datas:
if 'pyconfig' in d[0]:
a.datas.remove(d)
break
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='test.exe',
debug=False,
strip=None,
upx=True,
console=True )
这篇关于在Windows 7下打包pylab时,PySide和PyQt发生冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!