使JPEG支持QImage在py2exe编蟒蛇剧本?
题
我试图用一个JPEG图像在QImage对象从Python脚本,PyQt4.
脚本本身完美的作品、图像装载和可以操纵和呈现。然而,当我试着"汇编"这个脚本用py2exe,一切工作,但JPEG图像。取代它PNG同等工作,但因为我的计划下载图像从网,他们不会永远是在巴布亚新几内亚的格式和我不可能将它们转换的所有有另一个图书馆。
我发现JPEG图像的支持QImage,随着其他图像的格式,提供一些Dll中\脱\插件\imageformats目录(他们是所谓的qjpeg4.dll 和qjpeg4d.dll).我想我需要使用他们以某种方式我可执行的,但是我不知道如何。我只是试图复制他们到我的exe目录,没有运气。我已经试过了,因为 指出这里, ,包括这些文件作为data_files在setup.py 脚本,但没有运气(它看起来像它所做的是复制这些文件的exe的目录,因此它的变化没有什么复制手动无论如何)。
我敢肯定有一些应用程序有使用PyQt JPEG图片,他们怎么做?这似乎是一个简单的任务,但我被困在这了。
此外,我想我应用程序的跨平台(为什么我会编码在蟒蛇?), 我希望我不会跑到这种包装的麻烦(它不是唯一的)时,包装for OS X或Linux。将我?
解决方案
在用同样的问题绊倒左右的时间,我想与大家分享,对我的工作在Windows Vista上的解决方案: 使用python2.6的
将以下内容复制到目录由py2exe产生个人dist目录:
C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats
我直接放弃了imageformats目录到我的dist目录,没有任何进一步的修改qt.conf或类似的东西。我还没有尝试过,但这可能对声子正常工作。
其他提示
我必须承认,我从来没有设法让py2exe + PyQt的组合完全正确的(并且,py2exe不会跨平台的包装有助于在所有)。 PyInstaller似乎要好得多 - 在 http://www.pyinstaller.org/ 的文档是旧,但SVN主干是更近。有些文档是在最近的意大利PYCON会议滓给出的幻灯片 - 的 http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - 和,幻灯片都是英文的,并且包含当前维护人员的电子邮件,因此他们应该帮助! (而且,让我们都来游说当前的维护者,以更新文档...... - - !)
尝试添加 qt.conf 文件到您的exe文件的目录,以告诉QT在哪里可以找到二进制文件和插件。
类似下面的作品简单的情况下,如果你只是转储所有的DLL在同一目录的exe文件:
[Paths]
Prefix = .
Plugins = .
更新:那么你的插件,内容(的imageformat / sqldriver目录等)复制到exe文件目录。我不认为你可以从同一个目录中的exe加载插件的DLL。请参阅 Qt的插件文档一>有关plugon子目录细节。 (或者,离开了“插件=”复制目录exe文件目录的插件,让你拥有/plugins/imageloaders/qjpeg4.dll)。
艾蒂安-谢谢您的小费。经过大量的阅读和试验和错误,我到达了同样的结论:使用PIL显示jpeg在py2app产生的应用程序。
什么我猜猜是,拟议的解决方案py2exe/Windows不一定适用于py2app/OS x.
我在OS x豹。让我们假设有一个应用程序 MyApp.app
.
- 把图书馆
libqjpeg.dylib
和libqgif.dylib
在
MyApp.app/Contents/plugins/imageformats/
把这个放在
qt.conf
在MyApp.app/Contents/resources/
:[Paths] Prefix = . Binaries = .
在我的机器(豹)这一工作。
妄图上述所有解决方法后,我刚结束了使用PIL载入我的图片。因为我想这些图像转换为一个OpenGL Qt物件的纹理,结果被我是否加载使用Qt或PIL图像相同。仍然,我感到困惑,作为JPEG文件装载这样一个基本的事情是在GUI库那么复杂如众所周知的,并且广泛地用作Qt的。
我有同样的问题。固定使用这样的: http://mail.python.org/pipermail/python-list/2008-June/669374.html
- 复制建插件的目录:$YOUR_DIST_PATH/PyQt4/插件;
- 复制噪声。conf你区目录;
- 编辑夸脱conf变化的前缀。/PyQt4
对于我来说,问题解决了刚复制的可执行文件的目录中的“qt.conf”。
您可以找到 “qt.conf” ... \ PythonXX \ LIB \站点包\ PyQt4的\ qt.conf。
感谢您的帮助。
以上的一切失败的我,直到我意识到我的捆绑的.exe文件(也就是我的选择“bundle_files”:2在我setup.py我改成了bundle_files = 2,现在它巨大的。
将上述溶液的罚款。具体而言,我只是说我的setup.py如下一行: 数据= [( “imageformats”,glob.glob( “C:\ Python26 \ LIB \站点包\ PyQt4的\插件\ imageformats * .DLL”))]
(除了其他文件,当然)。
然后,将图像加载DLL被MY_EXE_DIR / imageformats
我并不需要一个qt.conf,使这项工作,但我敢肯定,如果你想保持你的目录树更简洁,你可以使用它。
它是能够使用JPEG插件与py2exe会脚本,甚至使用bundle_files.你需要安排两件事情,获得这个正常工作:
复制PyQt4/插件/imageformats输出目录的py2exe(default:
dist
)你只需要复制格式实际上,你需要的。
当使用的bundle_files选择你需要execlude的建dll文件 出压缩文件的使用
--dll-excludes
选择pyexe.你还是要复制建Dll输出目录的一些其他的方式(例如 通过使用
data_files
选项)。
在窗,建议的解决方案的工作。
然而,在os x不能让它工作,即使有说明在这里上面。
问题是:的 libqjpeg.dylib
和 libqgif.dylib
文件都位于 /Developer/Applications/Qt/plugins/imageformats/
目录中,并说,如果你已经安装了脱自己,不仅仅是PyQt.这些文件不会为我工作。
在PyQt分布,我看到的文件 libqjpeg.bundle
和 libqgif.bundle
在 /opt/local/libexec/qt4-mac/plugins/imageformats/
, 但是这些都不是图书馆,以及顺便说一句我不能打开其中的内容,甚至如果他们的.捆绑扩展。使用这些文件,而不是不起作用。
我想知道你做了什么,使它的工作os x.我已经安装PyQt下 这导.
感谢您对这个问题有帮助的答案!像你一样我也遇到同样的问题,没有解决方案可以帮助。但愿我是使用VCS,发现旧版本我的应用程序正确加载JPEG图像和新版本停止这样做。我发现采用PySide此错误的 V1.2.2 强>
要启用库加载,我用同样的溶液作为@Macke那样(即添加和编辑qt.conf)。
我qt.conf是下:
[Paths]
Binaries = .
Plugins = qtplugins
C:\Python27\Lib\site-packages\PySide\plugins directory
被复制到qtplugins
目录,所以我不得不下一目录:
qtplugins\accessible
qtplugins\codecs
qtplugins\graphicssystems
qtplugins\iconengines
qtplugins\imageformats
我有下一个代码:
class NotesCalendar(QtGui.QCalendarWidget):
note_icon = QtGui.QImage("res/16note.png")
移动类变量NotesCalendar.note_icon
到构造解决了这一问题和Qt开始正确地加载其库。似乎类变量构造中断一些内部PySide东西。
它适用于Windows上的问题。的 指定正确的qt.conf
和复制plugins
目录就足以使JPEG格式支持的 py2exe +的 PySide 强>构建。当然,你必须有没有问题,在自己的代码。的
我希望这将节省别人一天! ;)