主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

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

IronPython: スクリプトファイルをコンパイルする

                
 IronPythonスクリプトは、pyc.pyというスクリプトを使うことでコンパイルし、DLLやEXEにすることができる。まずはtest.pyというファイルを用意して、これをコンパイルしてみる。test.pyの中身はPythonモジュールをインポートしていないこと。あと実行式をif __name__ == "main":という条件式にネストするのもダメ(参照)。Pythonモジュールを使う場合のことは、このあとで。
text.py
print "Hello Absurd World"


上記のようなスクリプトファイルを用意して、コマンドプロンプトを開いてIronPythonをインストールしたディレクトリに移動する。
cd "C:\Program Files (x86)\IronPython 2.7"
移動したら以下のコマンドを実行。
ipy.exe Tools\Scripts\pyc.py /main:test.py /target:exe
実行したらtest.dllとtest.exeが生成される。これらに以下のファイルを添付すれば、アプリケーションとして配布できる。
IronPython.dll
IronPython.Modules.dll
Microsoft.Dynamic.dll
Microsoft.Scripting.dll



Pythonモジュールを使ったスクリプトをコンパイルする

 ここからは以前にインストールをしたSharpDevelopを使っていく。
 test.pyを作成したとき、Pythonモジュールは使わないようにお願いした。あれはその後に実行したコマンドがtest.pyのみをコンパイルするように命令していたからで、それではその他のPythonモジュールのスクリプトはコンパイルされないからである。SharpDevelopでGUIを使ってその問題を解決しつつ、アプリを作っていく。まずはコンソールアプリが第一歩。

 SharpDevelopを立ち上げて、『新しいソリューションを作成』を選ぶ。カテゴリはPythonで、『Console Application』を選ぶ。ソリューション名などは適当につける。名前を入れて決定すると、Program.pyというファイルが用意されるので、そこにスクリプトを書く。


*必要なPythonモジュールを集める
 デフォルトの状態では、Pythonの標準モジュールで使えるのはsysモジュールぐらいしかない。pyファイルがあるプロジェクトディレクトリにLibというフォルダを作る。ここに使いたいモジュールのpyファイルをIronPythonのインストールディレクトリにあるLibディレクトリからコピーする。SharpDevelopのProjectウィンドウ内で、右クリックメニューからLibフォルダを参照に追加する。Projectフォルダに表示されたpyファイルのビルドアクションがコンパイルになっているのを確認する。あとは実行するPythonスクリプトのトップに以下の二行を追加することで、Pythonスクリプトからも追加モジュールが見れるようにする。
120831_2.jpg

import sys
sys.path.append('Lib')
130313.png

適当なモジュールをインポートしながらスクリプトを書き終えたら、SharpDevelopのPythonメニューからRun without Debuggerを実行する。スクリプトが実行されるので、それで問題がなければBuildメニューからBuild Solutionを実行する。そうすると、プロジェクトのbinディレクトリの下にDebugというディレクトリがあり、そこにDLLとEXEができている。




コマンドプロンプトからコンパイルする場合
Unhandled Exception: IronPython.Runtime.Exceptions.ImportException: No module named os
at Microsoft.Scripting.Runtime.LightExceptions.CheckAndThrow(Object value)
at DLRCachedCode.__main__$1(CodeContext $globalContext, FunctionCode $functionCode)
at IronPython.Compiler.OnDiskScriptCode.Run()
at IronPython.Compiler.OnDiskScriptCode.Run(Scope scope)
at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptC
ode, ModuleOptions options)

IronPythonスクリプトをコンパイルしたら動かなくなったというのを結構見かける。で、そのエラーを見てみるとたいがい上記のようなエラー。おそらくこれは、モジュールスクリプトをコンパイルしていないから起こっている。モジュールファイルはIronPythonディレクトリの下のLibディレクトリにあるので、必要なものはここから選んでコンパイルに追加しなければならない。
先に書いたSharpDevelopでのビルドは、参照に含めたスクリプトをコンパイルに追加するのが容易だった。もしSharpDevelopを使わずにコマンドラインからコンパイルしたければ、おおよそ下記のように。
ipy Tools\Scripts\pyc.py Lib\os.py /out:text /main:text.py /target:exe
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

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