Question

Je suis en train d'utiliser une image JPEG dans un objet QImage à partir d'un script Python, avec PyQt4.

Le script lui-même fonctionne parfaitement, les charges d'image et peut être manipulé et rendu et tout. Cependant, lorsque je tente de « compiler » ce script avec py2exe, tout fonctionne, mais l'image JPEG. Le remplacer par un équivalent des œuvres PNG, mais depuis mes téléchargements de programme images à partir du Web, ils ne seront pas toujours au format PNG et je ne peux pas se permettre de les convertir tous avec une autre bibliothèque.

J'ai découvert que support d'image JPEG pour QImage, ainsi que d'autres formats d'image, est fourni par certaines DLL dans le répertoire \ qt \ plugins \ imageformats (ils sont appelés qjpeg4.dll et qjpeg4d.dll). Je pense que je dois les utiliser en quelque sorte dans mon exécutable, mais je ne sais pas comment. J'ai essayé de les copier simplement à mon répertoire exe, pas de chance. J'ai essayé, comme indiqué ici , d'inclure ces fichiers comme data_files dans le script setup.py, mais pas de chance (il ressemble à tout ce qu'il fait est de copier ces fichiers dans le répertoire de exe, il ne change rien de les copier manuellement de toute façon).

Je suis sûr qu'il ya une poignée d'applications là-bas en utilisant PyQt avec des images JPEG, comment ils le font? Cela semblait être une tâche triviale mais je suis coincé là-dessus maintenant.

De plus, je veux que mon application pour être multiplateforme (sinon pourquoi serais-je le codage en Python?), Je l'espère, je ne vais pas courir dans un tel pétrin d'emballage (ce n'est pas le seul) lors de l'emballage pour OS X ou Linux. Est-ce que je?

Était-ce utile?

La solution

Après des heures de trébucher autour de la même question, je voudrais partager la solution qui a fonctionné pour moi sur windows vista: en utilisant python2.6

copier le répertoire suivant dans votre répertoire dist généré par py2exe:

C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats

Je viens de tomber le répertoire imageformats directement dans mon répertoire dist, sans aucune autre modification à qt.conf ou quelque chose comme ça. Je ne l'ai pas essayé, mais cela peut fonctionner pour phonon ainsi.

Autres conseils

Je dois avouer que je ne réussi à obtenir la combinaison py2exe + pyqt tout à fait raison (et, py2exe ne contribue pas du tout avec l'emballage multi-plateforme). PyInstaller semble être beaucoup mieux - la documentation http://www.pyinstaller.org/ sont vieux , mais le tronc svn est beaucoup plus récente. Certains documents sont dans les diapositives données lors de la récente conférence PyCon Italia Tre - http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - et les diapositives sont en anglais, et contiennent le courant email de mainteneur, donc ils devraient aider! (Et, nous allons tout le lobbying auprès mainteneur de mettre à jour la documentation ... -)

Essayez d'ajouter un fichier qt.conf dans le répertoire de votre exe, à dire qt où trouver les binaires et les plugins.

Quelque chose comme les œuvres suivantes pour le cas simple, où vous décharge que tous les dll dans le même répertoire que le fichier EXE:

[Paths]
Prefix = .
Plugins = .

Mise à jour: Ensuite, copiez vos plugins-contenus (les répertoires ImageFormat / sqldriver etc) à l'exe dir. Je ne pense pas que vous pouvez charger dll Plug-in dans le même répertoire que le fichier EXE. Voir Qt doc pour plus de détails sur les sous-répertoires plugon. (Ou, laissez les plugins '=.' Et copiez les plugins dir à l'exe dir, vous avez /plugins/imageloaders/qjpeg4.dll).

Etienne - Merci pour le conseil. Après beaucoup de lecture et d'essais et d'erreurs, je suis arrivé à la même conclusion:. Utiliser PIL pour afficher les fichiers JPEG dans une application générée par py2app-

http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what- to-do-with-you-quand-vous êtes-comme-ce /

Ce que je pense est que les solutions proposées pour py2exe / Windows ne sont pas forcément à py2app / OSX.

Je suis sur Mac OS X Leopard. Supposons que vous avez un MyApp.app d'application.

  • Mettez les bibliothèques libqjpeg.dylib et libqgif.dylib
    MyApp.app/Contents/plugins/imageformats/
  • Mettre cela en qt.conf dans MyApp.app/Contents/resources/:

    [Paths]
    Prefix = .
    Binaries = .
    

Sur ma machine (Leopard) cela fonctionne.

Après avoir essayé toutes les solutions ci-dessus en vain, je vient de se terminer à l'aide de PIL pour charger mes images. Depuis que je voulais convertir ces images à une texture d'un widget OpenGL Qt, le résultat a été le même si je charge l'image en utilisant Qt ou PIL. Pourtant, je suis déconcerté qu'une telle chose de base au format JPEG de chargement est si compliqué dans une bibliothèque graphique aussi bien connu et largement utilisé comme Qt.

J'ai eu exactement le même problème. Fixe à l'aide de ceci: http://mail.python.org /pipermail/python-list/2008-June/669374.html

  1. plugins Copier Qt dans le répertoire: $ YOUR_DIST_PATH / PyQt4 / plugins;
  2. Copier qt.conf dans votre répertoire dist;
  3. Modifier qt.conf, changer le préfixe à ./PyQt4

Pour moi, le problème a été résolu simplement copier le « qt.conf » pour le répertoire de l'exécutable.

Vous pouvez trouver le "qt.conf" dans ... \ PythonXX \ Lib \ site-packages \ PyQt4 \ qt.conf.

Merci pour l'aide.

tout ce qui précède n'a pas pour moi jusqu'à ce que je compris que j'étais bottelage le fichier .exe (qui est, j'avais l'option « bundle_files ». 2 dans mon setup.py je l'ai changé à bundle_files = 2, et maintenant il fonctionne très bien.

Les solutions ci-dessus sont très bien. Plus précisément, je viens d'ajouter la ligne suivante dans mon setup.py: data = [( "imageformats", glob.glob ( "C: \ Python26 \ Lib \ site-packages \ PyQt4 \ plugins \ imageformats * .dll"))]

(en plus d'autres fichiers, bien sûr).

Ensuite, les dll de chargement d'images sont MY_EXE_DIR / imageformats

Je n'ai pas besoin d'un qt.conf pour faire ce travail, mais je suis sûr que vous pouvez l'utiliser si vous voulez garder votre arborescence moins encombré.

Il est possible d'utiliser le plugin JPEG avec un script py2exe'd, même en utilisant bundle_files. Vous devez organiser deux choses pour que cela fonctionne correctement:

  1. Copier PyQt4 / plugins / imageformats dans le répertoire de sortie de py2exe (par défaut: dist)

    Il vous suffit de copier les formats que vous avez réellement besoin.

  2. Quand utiliser l'option bundle_files vous devez execlude les fichiers dll Qt de la zipfile en utilisant l'option --dll-excludes pour pyexe.

    Il vous reste à copier les DLL Qt dans le répertoire de sortie d'une autre manière (par exemple en utilisant l'option de data_files).

sur les fenêtres, les solutions proposées fonctionnent parfaitement.

cependant, sur osx ne peut le faire fonctionner même avec des instructions ci-dessus.

question est: les fichiers libqjpeg.dylib et libqgif.dylib sont situés dans le répertoire /Developer/Applications/Qt/plugins/imageformats/, et que si vous avez installé Qt lui-même, pas seulement PyQt. ces fichiers ne fonctionnent pas pour moi.

dans la distribution PyQt, je vois les fichiers libqjpeg.bundle et libqgif.bundle dans /opt/local/libexec/qt4-mac/plugins/imageformats/, mais ce ne sont pas les bibliothèques, et je ne peux pas ouvrir BTW leur contenu soit, même si elles ont l'extension .bundle. l'utilisation de ces fichiers ne fonctionne pas au lieu non plus.

Je suis curieux de savoir ce que tu as fait pour le faire fonctionner sur osx. J'ai installé PyQt suivant ce guide .

Merci pour vos réponses utiles pour la question! Je l'ai rencontré même problème que vous avez fait et aucune solution pourrait aider. Si tout va bien, j'utilisais VCS et a constaté que ancienne version de mon application versions chargées des images JPEG correctement et nous sommes arrêtés à le faire. J'ai attrapé ce bogue en utilisant PySide v1.2.2 .

Pour permettre aux bibliothèques de chargement, je la même solution que @Macke a fait (à savoir ajouté et qt.conf modifié).

Mon qt.conf était suivante:

[Paths]
Binaries = .
Plugins = qtplugins

C:\Python27\Lib\site-packages\PySide\plugins directory a été copié dans le répertoire qtplugins, je devais les répertoires suivants:

qtplugins\accessible
qtplugins\codecs
qtplugins\graphicssystems
qtplugins\iconengines
qtplugins\imageformats

J'avais code suivant:

class NotesCalendar(QtGui.QCalendarWidget):
    note_icon = QtGui.QImage("res/16note.png")

Déplacement NotesCalendar.note_icon variable de classe au constructeur a résolu le problème et Qt commencé à charger correctement ses bibliothèques. Il semble que le constructeur variable de classe interrompue quelques trucs de PySide interne.

Il fonctionne sans problème sous Windows. Spécification répertoire correct qt.conf et la copie plugins est suffisante pour activer le support JPEG py2exe + PySide construction. Bien sûr, vous devez avoir aucun problème dans votre propre code.

J'espère que cela sauvera quelqu'un un jour! ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top