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

スポンサーサイト

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

IronPython: モジュールの依存スクリプトを集める

                
Python: Dependency of Python Modules

.NETやMonoでIronPythonを使うとき、Pythonモジュールを使うならそのスクリプトファイルが必要になる。EXEやDLLにするなら、スクリプトファイルまでコンパイルする必要がある。

モジュールのスクリプトはたいていが独立して実行できるわけではない。他のモジュールに依存している。この依存スクリプトファイルを集めるのが厄介。これを簡便化するために、モジュールを収集してくれるスクリプトを書いた。

使用はIronPythonが単独でインストールされたうえで、なおかつSharpDevelop上での実行を想定している。SharpDevelopはインストール時にIronPythonの実行のためのファイルが一式ついてくる。しかしPythonの標準モジュールのスクリプトは入っていない。SharpDevelopからIronPythonスクリプトを実行しようとすると、このモジュールなし環境での実行になる。そのためモジュールをインポートしようとすると、ImportErrorを吐く。このImportErrorを拾って、必要なモジュールを割り出している。必要なモジュールはSharpDevelopとは別でインストールされたIronPythonのフォルダから拾ってくるようにしている。

実行ディレクトリにLibというディレクトリを作る。IronPythonのLibディレクトリへのパスを入れる。欲しいモジュール名を入れる。異常の3つのステップ後に実行すれば、実行ディレクトリ下のLibディレクトリに必要スクリプトがそろえられている。

モジュールがスクリプトファイルで用意されている場合のみに対応しており、モジュールがディレクトリ構成を持っている場合は対応させていないので注意。

13041800.jpg

import sys
sys.path.append("Lib")

module_name = "os"
ipy_path = r"c:\IronPython 2.7\Lib\\"

d = module_name
copy_module = r"Lib\{0}.py"
li_module = []
importer = "import " + module_name
while d:
try:
__import__(module_name)
d = ""
except ImportError, err:
d = err[0].replace("No module named ", "")
li_module.append(d)
print d
filename = ipy_path + d + ".py"
with open(filename, "r") as f_read:
with open(copy_module.format(d), "w") as f_write:
f_write.write(f_read.read())
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

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

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