« [VRMNXpy]踏切のグループを拡張しよう | トップページ | VRMNXpyでマルチスレッド »

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

「飛んでんじゃん!どうやって?」「Python!」

「昨晩覚えたんだ!なんでもシンプルだよ!
Hello Worldなんか,print "Hello, World!"だけだし!」

「ダイナミックタイピング?ホワイトスペース?さっぱりだね。」
「こっちへおいでよ!プログラミングがもう一度楽しくなるよ!きれいさっぱり新しい世界さ!」
「で,どうやって飛んでるのさ?」

import antigravityって打ち込んだだけ。」
「それだけ?」
「くすり棚の中身を全部見て比べてみたけど,こりゃあPythonだと思うね。」

|

« [VRMNXpy]踏切のグループを拡張しよう | トップページ | VRMNXpyでマルチスレッド »

VRM:研究」カテゴリの記事

コメント

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分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Pythonは空をも飛べる VRMNXは?:

« [VRMNXpy]踏切のグループを拡張しよう | トップページ | VRMNXpyでマルチスレッド »