mieki256's diary



2012/10/02(火) [n年前の日記]

#1 [python] PyQt4のスクリプトをexe化してみたり

以下の記事を参考に作業してみたり。環境は Windows7 x64 Python 2.7.3 32bit等。

_PyQt を py2exe でフリージング -- Kosei Kitahara's Blog
_py2exeモジュールについて ・ PythonMatrixJp
_py2exeでハマったことの解決法 - 記憶は削除の方向で
_Py2exe 利用ノート

一応 exe ができた。素晴らしい。しかし、dist/ 以下が40MB近い容量になってしまった。なんだかデカ過ぎのような…でもないのかな…。QtWebKit4.dll てのが12MBぐらいあったりして。たぶんブラウザ相当がドカンと入っている予感。

IEやGoogleChrome等のブラウザ+JavaScriptなら、同じ処理をもっと小さいファイルサイズで実現できるのかなとチラリと思ったりもして。まあ、その代り、ブラウザ自体のファイルサイズが大きいわけだけど。

アプリアイコンも追加してみたり。 :

以下の記事を参考に。

_ミニタイマー(10) ・ Windows 7 のアプリケーション・アイコン作成 | S.F.Page
_hajimen @ ウィキ - 実行しているスクリプトのパスを求める

アイコンは2種類が必要。
  • exeファイルに割り当てる .ico ファイルのアイコン。
  • ウインドウを表示した際のタイトルバーやタスクバーに表示する .png ファイルのアイコン。
この2種類が必要。

とりあえず、Inkscape で 256x256のpngを作成して、 _アイコン ウィザード を使わせてもらい、複数のアイコン画像が含まれている .ico を生成。setup.py に記述してみたり。

ウインドウのタイトルバーに表示されるアイコンについては、別途指定しないといけないらしい。とりあえず、48x48 の png を作成して、以下の記事を参考にしてスクリプト中で指定。

_First programs in PyQt4 toolkit
self.setWindowIcon(QtGui.QIcon('web.png'))
この行が、アイコンを指定している行らしい。

setup.pyは以下のようになった。 :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- mode: python;Encoding: utf8n -*-
#
# py2exeでexe化するための設定?ファイル

from distutils.core import setup
from glob import glob
import os
import sys
import shutil

if sys.platform == 'win32':
    """Windows用"""

    import py2exe

    # 開発環境のパスに合わせて修正すること
    
    WIN32UI_DIR = r"C:\Python27\Lib\site-packages\pythonwin"
    IMAGELIB_DIR = r"C:\Python27\Lib\site-packages\PyQt4\plugins\imageformats"
    
    # MFC dll を追加
    mfcfiles = [os.path.join(WIN32UI_DIR, i) for i in [
        "mfc90.dll", 
        "mfc90u.dll", 
        "mfcm90.dll", 
        "mfcm90u.dll", 
        "Microsoft.VC90.MFC.manifest"]]

    # 任意の画像フォーマットの dll を追加
    imgfiles = [os.path.join(IMAGELIB_DIR, i) for i in [
        "qgif4.dll",
        "qico4.dll",
        "qjpeg4.dll",
        "qmng4.dll",
        "qsvg4.dll",
        "qtiff4.dll",]]
    
    data_files = [
        ("Microsoft.VC90.MFC", mfcfiles), 
        ("imageformats", imgfiles), 
    ]
    
    py2exe_options = {
        "compressed": 1,
        "optimize": 2,
        "bundle_files": 3,
        "includes" : ["sip", "PyQt4", "PyQt4.QtGui", "PyQt4.QtWebKit", "PyQt4.QtNetwork"]
    }
    setup(
        data_files = data_files,
        options={"py2exe" : py2exe_options},
        windows=[{"script" : "markdowneditorpyqt.pyw", "icon_resources": [(1,"resource/icon.ico")]}],
        zipfile="zipped.lib",
    )
mfc90*.dll 等は、Windows\winsxs\ 以下から持ってきている事例が多いのだけど。眺めてみても、どれがどれやらで。しかし、Pythonのインストールフォルダ以下に、pythonwin というのが入っていて、そこにも .dll があるらしく。それをコピーしてみることに。

PyQt4 において、bmp と png 以外の画像を開くにはそれぞれに対応した dll が必要らしく。最低限、gif、jpeg、ico ぐらいは追加しておかないと、QWebView 上で画像が表示されなかった。

exe化したものを実行しても、モジュールが見つからない云々とエラーが出たので、includes にずらずらと列挙してみたり。これでいいのかどうかは分からんけど。

iniファイルへのアクセスを勉強中。 :

Python の ConfigParser とやらを使えば、iniファイルの作成・保存が簡単にできるらしく。試してみたら、たしかに簡単だった。調子に乗って、QMainWindows のウインドウ位置とサイズを記録復元するようにしてみたけれど。相変わらず、日本語のフォント名が記録できない…。どうすればいいんだろう…。

とりあえず、QMainWindow の位置とサイズは、.geometry() で取得、.setGeometry() で設定できるらしい、とメモ。QWidget のメソッドだけど。

以上です。

過去ログ表示

Prev - 2012/10 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project