Pythonは空をも飛べる VRMNXは?
<注意: VRM NXは開発途上の段階であり,βテストの経過に伴って仕様変更の可能性がある。本エントリに示す情報は執筆時点(v6.0.0.25)でのものである。> (2019/1/20 現在 Ver. 6.0.0.25)
VRMNXのPythonエンジンでは,カレント作業ディレクトリ(os.getcwd()で取得できる)と,モジュールを検索する場所(sys.path)はどのようになっているのか,次のコードで調べてみた。
import vrmapi import os, sys vrmapi.LOG('[CWD] ', os.getcwd()) vrmapi.LOG('[PATH]') for p in sys.path: vrmapi.LOG(p)
結果,
- カレント作業ディレクトリは,レイアウトを保存しているフォルダ
- モジュール検索パスは,VRMNXインストールフォルダ/python/Lib
であることがわかった。
さらに,sys.path.append(os.getcwd())
で,レイアウトを保存している場所をモジュール検索パスに追加できることも分かった。つまり,これ以降では,レイアウトファイルと同じディレクトリに保存してあるpythonスクリプトをimportしてVRMNXで利用できる。
VRMNXのスクリプトエディタでPythonのコードを書くのは結構苦痛(インデントはスペースキー連打しなきゃいけないし,色分けもないし,行番号もわからない)であるが,クラス定義などの長ったらしい部分をmymodule.pyのように名前をつけてレイアウトと同じディレクトリに置いておけば,import mymodule
でVRMNXレイアウトに取り込むことができる。
モジュールの再利用もカンタンだし,Webでレイアウトを配布するときも,レイアウトファイルと一緒に圧縮してやればよい。
sys.path.append(os.getcwd())
をしなくても,VRMNXのインストールフォルダ以下のpython/Libに自作したモジュールを入れておく術もあるかもしれない。しかし,こんな方法はそもそも気が引けるし,モジュール側に非互換な変更が生じたり,作者が異なる同名のモジュールが書かれたとしたら重複するとまずい。Webで配布するときもインストラクションが面倒臭そうである。やらないほうが賢明だ。
「飛んでんじゃん!どうやって?」「Python!」
「昨晩覚えたんだ!なんでもシンプルだよ!
Hello Worldなんか,print "Hello, World!"
だけだし!」
「ダイナミックタイピング?ホワイトスペース?さっぱりだね。」
「こっちへおいでよ!プログラミングがもう一度楽しくなるよ!きれいさっぱり新しい世界さ!」
「で,どうやって飛んでるのさ?」
「import antigravity
って打ち込んだだけ。」
「それだけ?」
「くすり棚の中身を全部見て比べてみたけど,こりゃあPythonだと思うね。」
| 固定リンク
「VRM:研究」カテゴリの記事
- VRMNXの時間系イベントが使いにくいなあと思っているアナタへ(2019.12.24)
- [VRMNX] フレーム同期の話(2019.07.18)
- [Python] リスト型をベクトルに見立てて計算したい(2019.06.16)
- VRMNXのレイヤーベース地形を使ってみよう(前編)(2019.05.18)
- [VRMNX]自動踏切モジュール(2019.01.25)
この記事へのコメントは終了しました。
コメント
2019/9/13現在のVer.6.0.0.120では,カレントディレクトリの挙動が一概に上のように言えないことに,ビューわかしおさん(@ViewWakashio257)のTwitterでのご指摘で気がついた。
https://twitter.com/ViewWakashio257/status/1175737435315027969
VRMNX起動時
os.getcwd()はVRMNXのインストールフォルダ
新規レイアウト作成したとき
os.getcwd()は直前の状態を維持
ファイル>開く からレイアウトをオープンした場合
os.getcwd()はレイアウトの保存場所に上書きされる
最近のレイアウト からレイアウトをオープンした場合
os.getcwd()は直前の状態を維持
レイアウトファイルと同じディレクトリにモジュールや入力ファイルを置く方法にはやや難がある可能性が出てきた。
投稿: AKAGI | 2019年9月23日 (月) 01時08分