py2exe でコンパイルされた Python スクリプトで QImage の JPEG サポートを有効にしますか?
質問
PyQt4 を使用して、Python スクリプトから QImage オブジェクトで JPEG 画像を使用しようとしています。
スクリプト自体は完全に機能し、画像が読み込まれ、操作、レンダリングなどが可能になります。ただし、このスクリプトを py2exe で「コンパイル」しようとすると、JPEG 画像以外はすべて機能します。これを同等の PNG に置き換えることはできますが、プログラムは Web から画像をダウンロードするため、画像が常に PNG 形式であるとは限らず、すべてを別のライブラリで変換する余裕はありません。
QImage の JPEG 画像サポートは、他の画像形式とともに、\qt\plugins\imageformats ディレクトリ内のいくつかの DLL (qjpeg4.dll および qjpeg4d.dll と呼ばれます) によって提供されることがわかりました。実行可能ファイルで何らかの方法でそれらを使用する必要があると思いますが、方法がわかりません。単純にそれらを exe ディレクトリにコピーしようとしましたが、うまくいきませんでした。私は試してみました、 ここに示されています, 、これらのファイルをsetup.pyスクリプトにdata_filesとして含めようとしましたが、うまくいきませんでした(これらのファイルをexeのディレクトリにコピーするだけのようで、いずれにしても手動でコピーするのと何も変わりません)。
JPEG 画像で PyQt を使用するアプリケーションはいくつかあると思いますが、どうやって行うのでしょうか?簡単な作業のように思えましたが、今はそれに行き詰まっています。
また、アプリをクロスプラットフォームにしたいのですが (Python でコーディングする理由が他にあるでしょうか?)、OS X または Linux 用にパッケージ化するときに、このようなパッケージ化の問題 (これだけではありません) に遭遇しないことを願っています。そうしますか?
解決
は、同じ問題でつまずき周りの時間後、私は、Windows Vista上で私のために働いた解決策を共有したいと思います: python2.6を使用して
py2exeによって生成されたあなたのdistディレクトリに次のディレクトリをコピーします:
C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats
私はちょうどそのような任意のさらなるqt.confする修正または何もせずに、私のdistディレクトリに直接imageformatsディレクトリを落としました。私はそれを試していないが、これは、同様フォノンのために働くことがあります。
他のヒント
私は(クロスプラットフォームのパッケージとは全く役に立たないと、py2exe)py2exe + PyQtは組み合わせが非常に権利を取得するために管理したことがないと告白する必要があります。 pyInstallerのは、はるかに良いようです - http://www.pyinstaller.org/ のでドキュメントが古いですしかし、SVNトランクははるかに最近のことです。いくつかのドキュメントが最近Pyconイタリアトレ会議で与えられたスライドである - <のhref =「http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf」のrel = 「nofollowをnoreferrer」> http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf を - と、スライドは英語であり、そして現在が含まれていますメンテナのメールなので、彼らは役立つはず! (そして、ドキュメントを更新するために、すべてのロビーに現在のメンテナをしてみましょう... - !)
に、あなたのexeファイルのディレクトリへの qt.conf のファイルを追加してみてくださいバイナリやプラグインを見つけるためにどこQT伝えます。
あなただけのexeファイルと同じディレクトリ内のすべてのDLLのをダンプする簡単なケースは、次の作品のように何かます:
[Paths]
Prefix = .
Plugins = .
アップデート:そして、exeファイルのディレクトリへのあなたのプラグイン・コンテンツ(imageformat / sqldriverディレクトリなど)にコピーします。私はあなたがexeファイルと同じディレクトリからプラグインのDLLを読み込むことができるとは思いません。 / < Qtのプラグインのドキュメントを参照してくださいA> plugonサブディレクトリの詳細については。 (または、「プラグイン=」除外とexeファイルのディレクトリへのディレクトリのプラグインをコピーし、あなたが持っている/plugins/imageloaders/qjpeg4.dll)。
エティエンヌ - 先端をありがとうございました。多くの読書や試行錯誤の後、私は同じ結論に達し:py2app-生成アプリでJPEGファイルを表示するにはPILを使用
。<のhref = "http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what-to-do-with-you-とき-youreの様これ/」のrel = "nofollowをnoreferrer"> http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what- to-do-と-あなた-とき-youreの様この/ に
私が推測することはpy2exe / Windows用の提案されたソリューションは、必ずしもpy2app / OSXには適用されないということです。
私はOSX Leopardを使っています。アプリケーションがあると仮定しましょう MyApp.app
.
- ライブラリを置く
libqjpeg.dylib
そしてlibqgif.dylib
で
MyApp.app/Contents/plugins/imageformats/
これを入れてください
qt.conf
でMyApp.app/Contents/resources/
:[Paths] Prefix = . Binaries = .
私のマシン (Leopard) ではこれが機能します。
無駄では上記のすべてのソリューションを試した後、私はちょうど私のイメージをロードするためにPILを使用して終了しました。私は、OpenGL Qtのウィジェットにテクスチャにこれらの画像を変換したかったので、その結果は、私はQtのかPILを使って画像をロードするかどうか同じでした。それでも、私はよく知られており、広くはQtとして使用されるような負荷JPEGファイルなどの基本的なことは、GUIライブラリで非常に複雑であることに困惑しています。
私もまったく同じ問題を抱えていました。これを使用して修正しました: http://mail.python.org/pipermail/python-list/2008- June/669374.html
- Qt プラグインをディレクトリにコピーします。$YOUR_DIST_PATH/PyQt4/プラグイン;
- qt.conf を dist ディレクトリにコピーします。
- qt.conf を編集し、Prefix を ./PyQt4 に変更します。
私にとっては、問題は単に実行可能ファイルのディレクトリの「qt.confを」コピー解決しました。
あなたは... \ PythonXX \ Libの\サイト - パッケージ\ PyQt4 \ qt.confで "qt.conf" を見つけることができます。
助けてくれてありがとう。
すべては私がオプション「bundle_files」を持っていました。 2、そして今では素晴らしい作品ます。
上記の解決策は罰金です。具体的には、私はちょうど私のsetup.pyに次の行を追加しました: データ= [( "imageformats"、glob.glob( "C:\ Python26 \ Libの\のsite-packages \ PyQt4 \プラグイン\ imageformats * .dllは"))]
(他のファイルに加えて、もちろん)。
次に、画像ローディングDLLのMY_EXE_DIR / imageformatsにある
私はあなたがすっきりディレクトリツリーを維持したい場合は、あなたがそれを使用することができます確信しているのに、私は、この仕事をするためにqt.confを必要としませんでした。
Bundle_files を使用した場合でも、py2exe スクリプトで JPEG プラグインを使用することができます。これを適切に機能させるには、次の 2 つのことを調整する必要があります。
PyQt4/plugins/imageformats を py2exe の出力ディレクトリにコピーします (デフォルト:
dist
)実際に必要な形式のみをコピーする必要があります。
bundle_filesオプションを使用する場合、zipfileからqt dllファイルを実行する必要があります。
--dll-excludes
pyexeのオプション。QT DLLを他の方法で出力ディレクトリにコピーする必要があります(を使用するなど
data_files
オプション)。
Windows上で、解決策は完璧に動作提案します。
しかし、OSX上で、それはここでも上記の手順では動作しないことができます。
libqjpeg.dylib
とlibqgif.dylib
ファイルは/Developer/Applications/Qt/plugins/imageformats/
ディレクトリに配置されている、とあなたはQtの自体だけでなく、PyQtはをインストールしている場合に、疑問があります。これらのファイルは私のために動作しません。
のPyQt分布で、彼らは.bundle拡張子を持っている場合でも、私は、しかし、これらはライブラリではありません、libqjpeg.bundle
内のファイルのlibqgif.bundle
と/opt/local/libexec/qt4-mac/plugins/imageformats/
を参照してください、そしてところで私はどちらか、その内容を開くことができません。どちらか動作しません。代わりに、これらのファイルを使用します。
私はあなたがそれをOSX上で動作させるために行っているかを知るために好奇心。私は<のhref = "http://arstechnica.com/open-source/guides/2009/03/how-to-deploying-pyqt-applications-on-windows-and-mac-os-x次のPyQtをインストールしました。 ARS / 2" REL = "nofollowをnoreferrer">このガイドを
質問のためのあなたの役に立つ答えてくれてありがとう!私はあなたがやったのと同じ問題が発生していると何の解決策は助けることができませんでした。うまくいけば、私はVCSを使用していたし、私のアプリの古いバージョンを正しくJPEG画像をロードし、新しいバージョンがそれをやって停止したことがわかりました。私はPySideの 1.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
ディレクトリを指定の py2exe の中にJPEGのサポートを有効にするために十分です+ PySide のビルドの。もちろん、あなたは自分のコードに問題があってはなりません。の
私はこれが誰かを救うことを願っています! ;)