忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

PyDev + Mono + IronPython設定(半分解決)

どういう需要があるかはわかりませんが、EclipseにMonoで動くIronPythonインタープリタをセットする話です。
もしかしたらMacなんかでIronPythonをEclipseから使いたいというときに応用できるかもしれません。
なにせMac用のMonoに入っているipyはなぜかそのままではPyDevにセットできないのです。
MacではIronPythonとMonoを両方共ダウンロードする必要があります。


こんなbatファイルを書きます:
@echo OFF
"C:\Program Files (x86)\Mono-2.10.9\bin\mono.exe" "C:\Program Files (x86)\IronPython 2.7\ipy.exe" %*

このbatファイルをWindow > PreferencesからのPyDev > Interpreter - Iron PythonでNewボタンを押しセットします。
あとはセットアップが進むのを見守るだけです

これで終わりではありません。

なんとおどろくべきことに、インタープリタのLocationには"C:\Program Files (x86)\IronPython 2.7\ipy.exe"しか表示されません!!
mono.exeはどこへ行ったのでしょう?
実は、PyDevはこの時に「インタープリタの場所」をインタープリタ自身に聞いているのです。
それを使っているため、ろくな事になりません。
ipy.exeだけが残り、mono.exeは消え去ったのです。

ちなみにPyDevは最初にこんな引数をインタープリタに渡します:

-X:Frames C:\Users\Developer\Documents\Eclipse\eclipse-SDK-4.2.1-win32\eclipse\plugins\org.python.pydev_2.7.1.2012100913\pysrc\interpreterInfo.py

そしてインタープリタの場所はこんなふうに返されます:
	<xml>
	<version>2.7</version>
	<executable>C:\Program Files (x86)\IronPython 2.7\ipy.exe</executable>
	<lib path="out">C:\Users\Developer\Documents\Eclipse\eclipse-SDK-4.2.1-win32\eclipse\plugins\org.python.pydev_2.7.1.2012100913\pysrc</lib>
	<lib path="ins">C:\Program Files (x86)\IronPython 2.7\Lib</lib>
	<lib path="ins">C:\Program Files (x86)\IronPython 2.7\DLLs</lib>
	<lib path="ins">C:\Program Files (x86)\IronPython 2.7</lib>
	<lib path="ins">C:\Program Files (x86)\IronPython 2.7\lib\site-packages</lib>
	<forced_lib>exceptions</forced_lib>
	<forced_lib>__builtin__</forced_lib>
	<forced_lib>sys</forced_lib>
	<forced_lib>unicodedata</forced_lib>
	<forced_lib>_ast</forced_lib>
	<forced_lib>imp</forced_lib>
	<forced_lib>future_builtins</forced_lib>
	<forced_lib>clr</forced_lib>
	<forced_lib>cmath</forced_lib>
	<forced_lib>msvcrt</forced_lib>
	<forced_lib>mmap</forced_lib>
	<forced_lib>signal</forced_lib>
	<forced_lib>winsound</forced_lib>
	<forced_lib>zipimport</forced_lib>
	<forced_lib>zlib</forced_lib>
	<forced_lib>_bisect</forced_lib>
	<forced_lib>_codecs</forced_lib>
	<forced_lib>_collections</forced_lib>
	<forced_lib>copy_reg</forced_lib>
	<forced_lib>cPickle</forced_lib>
	<forced_lib>cStringIO</forced_lib>
	<forced_lib>datetime</forced_lib>
	<forced_lib>errno</forced_lib>
	<forced_lib>gc</forced_lib>
	<forced_lib>itertools</forced_lib>
	<forced_lib>_csv</forced_lib>
	<forced_lib>_io</forced_lib>
	<forced_lib>_locale</forced_lib>
	<forced_lib>marshal</forced_lib>
	<forced_lib>math</forced_lib>
	<forced_lib>_md5</forced_lib>
	<forced_lib>nt</forced_lib>
	<forced_lib>operator</forced_lib>
	<forced_lib>_sha</forced_lib>
	<forced_lib>_sha256</forced_lib>
	<forced_lib>_sha512</forced_lib>
	<forced_lib>socket</forced_lib>
	<forced_lib>_ctypes</forced_lib>
	<forced_lib>_ctypes_test</forced_lib>
	<forced_lib>_heapq</forced_lib>
	<forced_lib>_struct</forced_lib>
	<forced_lib>thread</forced_lib>
	<forced_lib>time</forced_lib>
	<forced_lib>xxsubtype</forced_lib>
	<forced_lib>_functools</forced_lib>
	<forced_lib>_random</forced_lib>
	<forced_lib>_sre</forced_lib>
	<forced_lib>_ssl</forced_lib>
	<forced_lib>_subprocess</forced_lib>
	<forced_lib>_warnings</forced_lib>
	<forced_lib>_weakref</forced_lib>
	<forced_lib>_winreg</forced_lib>
	<forced_lib>bz2</forced_lib>
	<forced_lib>re</forced_lib>
	<forced_lib>select</forced_lib>
	<forced_lib>binascii</forced_lib>
	<forced_lib>array</forced_lib>
	<forced_lib>_sqlite3</forced_lib>
	<forced_lib>wpf</forced_lib>
	</xml>
なので、ここまでではMacだとひどい目にあいます。
インタープリタの設定が終わった!やった!
と喜んで、Pythonプログラムをいざ実行しようとすると、
「ipy.exeは実行できません」という趣旨のメッセージが表示されるのを目にすることになるのです。
Macではexeは実行できませんからね。
しかしmonoを指定したはず・・・どうして?と
事前に知識がない状態だと混乱するでしょう。(混乱しました)

いったんEclipseを終了し、

workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.python.pydev.prefs

をテキストエディタで開きます。
すると中に

<executable>C\:\\Program Files (x86)\\IronPython 2.7\\ipy.exe</executable>

というのがあるのがわかると思います。
これを上で書いたbatファイルの場所に書き換えます。
もちろん\を\\と書き換えることを忘れないで下さい。
Cのあとの\も。

そしてEclipseを実行すると、一応インタープリタとしてbatファイルが設定できます。
めでたしめでたし。

しかしこの方法も完璧ではありません。
一部のコードが動かなくなります。(ひどい状況です)
どうしてでしょうね・・・










拍手[0回]

PR