のほほんのおと

IT系、音楽、映画、旅行などなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Python】スクリプトをPyInstallerでフローズンバイナリ化(EXEファイル化)

PythonスクリプトをWindowsのEXEファイル形式にする方法を調べてみたので整理してみました。

Python使いじゃない人に自作スクリプトを使ってもらうにはどうしてもこういうのが必要になりますね。
面倒臭いなぁと思っていたのですが、やってみたらそれほどでもありませんでした。
先人達に多謝多謝。

ちなみにこういうのを「フローズンバイナリ」と言うらしいですね。
でも一般的じゃない気がするので「EXE化」としておきます。

「 方法選定 」

EXE化の方法としては幾つか見つかりました。
  • py2exe
  • cx_Freeze
  • PyInstaller
py2exeが一番情報がありましたが、今回はPyInstallerを使うことにしました。
要件として「EXEファイル1つにしたい」というのがあったのですが、py2exeではできないようだからです。

「 環境 」

ここで今回やった時の環境について。
Windows7 64bit
Python 2.7
Pythonのバージョンには注意です。
最初、3.X系でやろうとしたのですがうまく行かず、結局2.7を入れました。

今回EXE化するのは自作の以下のスクリプトです。
CybozeMailDL.py
グループウェア「サイボウズ」のメールをダウンロードするツールです。これについてはまた別で。

「 PyInstallerインストール 」

以下へ。
www.pyinstaller.org/

以下のstable release版を落とす。
pyinstaller-1.5.1.zip

解凍してできたフォルダを以下へ移動。
C:\Software\pyinstaller-1.5.1

本当はこのPyInstallerへのPATHを通した方がいいのかもしれませんが、やりませんでした。
Pythonにも通してない環境です。

「 手順概要 」

これからやる作業は以下です。
  1. 対象スクリプト準備
      対象スクリプトはPyInstallerのインストールフォルダ下に置きます。
  2. 初期コンフィグ
      PyInstallerをインストール後、1回だけやる作業です。
  3. specファイル作成
  4. EXE化
  5. 確認
「 作業 」

1. 対象スクリプト準備

対象スクリプトはPyInstallerのインストールフォルダ下に置きます。
C:\Software\pyinstaller-1.5.1\
CybozeMailDL.py

2. 初期コンフィグ
PyInstallerをインストール後、1回だけやる作業です。
C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Configure.py
I: computing EXE_dependencies
I: Finding TCL/TK...
W: library coredll.dll required via ctypes not found
I: Analyzing C:\Software\Python27\DLLs\_tkinter.pyd
    :中略
I: could not find TCL/TK
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
I: ... resource update available
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...UPX unavailable
I: computing PYZ dependencies...
I: done generating config.dat

C:\Software\pyinstaller-1.5.1>

以下のようにWarningっぽいのが一つ出てしまいましたが、エラーではないみたいなのでほっときます。
W: library coredll.dll required via ctypes not found

なお、このとき私の環境でははじめ以下のエラーになりました。
C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Configure.py
ERROR: Python 2.6+ on Windows support needs pywin32
Please install http://sourceforge.net/projects/pywin32/

C:\Software\pyinstaller-1.5.1>

ということで、pywin32を以下から入手し、インストールしてあります。
sourceforge.net/projects/pywin32/
Python for Windows extensions

3. specファイル作成


specファイルを作成します。
このときオプション-Fをつけることで、1つのEXEファイルにすることができます。

C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Makespec.py -F CybozeMailDL.py
wrote C:\Software\pyinstaller-1.5.1\CybozeMailDL\CybozeMailDL.spec
now run Build.py to build the executable

C:\Software\pyinstaller-1.5.1>

specファイルは以下のよう にCybozeMailDL というフォルダが作られ、その下にできています。
C:\Software\pyinstaller-1.5.1>dir .\CybozeMailDL\
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\pyinstaller-1.5.1\CybozeMailDL のディレクトリ

2011/11/23  16:56    <DIR>          .
2011/11/23  16:56    <DIR>          ..
2011/11/23  16:56               492 CybozeMailDL.spec
               1 個のファイル                 492 バイト
               2 個のディレクトリ  120,157,540,352 バイトの空き領域

C:\Software\pyinstaller-1.5.1>

4. EXE化

いよいよEXEファイル化です。

C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe  Build.py .\CybozeMailDL\CybozeMailDL.spec
I: Dependent assemblies of C:\Software\Python27\python.exe:
I: x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none
checking Analysis
building Analysis because outAnalysis0.toc non existent
running Analysis outAnalysis0.toc
Analyzing: support\_mountzlib.py
Analyzing: support\useUnicode.py
Analyzing: CybozeMailDL.py
I: Analyzing C:\Software\Python27\python.exe
I: Dependent assemblies of C:\Software\Python27\python.exe:
    :中略
I: Analyzing C:\Software\Python27\DLLs\sqlite3.dll
I: Skipping KERNEL32.dll dependency of sqlite3.dll
Warnings written to .\CybozeMailDL\warnCybozeMailDL.txt
checking PYZ
rebuilding outPYZ1.toc because outPYZ1.pyz is missing
building PYZ outPYZ1.toc
checking PKG
rebuilding outPKG3.toc because outPKG3.pkg is missing
building PKG outPKG3.pkg
checking EXE
rebuilding outEXE2.toc because CybozeMailDL.exe missing
building EXE from outEXE2.toc
Appending archive to EXE .\CybozeMailDL\dist\CybozeMailDL.exe

C:\Software\pyinstaller-1.5.1>

5. 確認

以下のようにCybozeMailDLフォルダの下に更にdistフォルダが掘られ、EXEファイルができていることが確認できます。
ちなみにspecファイルを作る際に-Fオプションをつけなかった場合はここにEXE以外に色々なファイル、フォルダがぞろぞろとできています。
その場合、distフォルダ丸ごと配布、という形になるようです。

C:\Software\pyinstaller-1.5.1>dir C:\Software\pyinstaller-1.5.1\CybozeMailDL\dist\
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\pyinstaller-1.5.1\CybozeMailDL\dist のディレクトリ

2011/11/23  16:58    <DIR>          .
2011/11/23  16:58    <DIR>          ..
2011/11/23  16:58         4,362,585 CybozeMailDL.exe
               1 個のファイル           4,362,585 バイト
               2 個のディレクトリ  120,144,654,336 バイトの空き領域

C:\Software\pyinstaller-1.5.1>

あとはこのできたEXEをどこか全く関係ないフォルダや別PCにコピーして試してみましょう。
こんだけです。

テーマ:プログラミング - ジャンル:コンピュータ

【ITトリビア】 suは"スイッチユーザ"ぢゃない

LinuxなどのUNIX系OSのコマンドに「su」というのがありますが、これが「switch user」の略だと思っている人が多いですね。
かくいう私も長い事そう思っていた時期がありました。
あるいは「super user」派も多いです。

では、正しくはなんなのか?
「substitute user identity」の略だそうな。

substituteって英語力の無い自分には馴染みの無い単語だったので、Yahoo!辞書でひいてみました。
   [名] 1 (…の)代わりをする人[物],代理人,身代わり,代役,補欠,代用品,代用食((for ...))
なるほど、な感じですな。

ちなみに初期の頃は「super user」の略だったようです。
その頃は名前の通り、rootになる機能しか無かったと。
その後、任意のユーザになる機能も付与され、「substitute user identity」の略になった、と。
そんな歴史的経緯があるようですな。

ITトリビアでしたと。

テーマ:雑記 - ジャンル:コンピュータ

前のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。