Dynamo pythonNode内から Pythonファイルの読み込み

DynamoのPythonノードを利用している人がだんだんと増えてきた印象がある。これまでのIronPythonではなく、CPythonが同梱されるようになって少しハードルが下がったのだろうか。

今回は、Dynamo内のPyrhonから、外部保存されたPythonファイル(.py)を呼び出す方法について紹介したいと思う。

まずはじめに、今回利用するバージョンについて確認する。
今回は
Revit2023
Dynamo 2.16を利用する。

Revit2023に同梱されているDynamoは初期では2.13であったが、最新は2.16になっているので少し注意が必要である。

初期設定から開始する。
やらなくても良いがPythonをコピペする機会が多いのであれば、設定しておくと良いと思う。

Pythonを利用する場合には、インデント(文字の開始位置)に注意する必要がある。設定によって、これを[Tab]キーを利用しているのか[space]キーを利用しているのか判定できるようになる。
設定方法は、
Dynamo>基本設定

基本設定>フィーチャ>Pythonエディタに空白スペースを表示
を(オン)青い状態にしておく。


設定しない場合
設定した場合

設定した場合には、「・」はスペース「>>」は普通のエディタのタブ表示となっている。多少見にくいかもしれないが、Pythonが動かないときの助けになるかもしれない。


まずはDynamo内のPythonのカレントフォルダがどこになっているのか確認する。
個人的には、Pythonを利用する場合には、パス(どこのフォルダを探しに行くか)の設定が非常に重要だと感じている。

import os
OUT = os.getcwd()


どうやら、Revitのパス(Revit.exeのあるフォルダ)が返される。
これは、Pythonとはあまり関係なさそうなのでスルーする。

今度は下記のPython環境に関するパスを確認してみる。

import sys

OUT = sys.path

Dynamoが呼び出しているPython.exeのあるフォルダとRevitAPIなどを利用するために必要な.netのフォルダが登録されていることがわかる。

さて、確認が終わったところで、実際に外部Pythonファイルの呼び出しを行ってみたい。

適当なフォルダを作成し、その中に適当なPythonファイルを作成する。
ここでは、Cドライブ直下に「Dynamotest」フォルダを作成し、その中に、expythontest.pyというPythonファイルを作成した。


このPythonファイルに、下記のように関数を定義した。
単純な足し算の結果を返すものだ。

# 関数の定義
def add(a,b):
    return a+b

呼び出すDynamo内のPythonでは、パスの追加と、作成したPythonファイルの読み込みと、関数の呼び出しを行う。

# Python 標準ライブラリおよび DesignScript ライブラリをロード
import sys

# パスの追加
sys.path.append(r"C:\Dynamotest")

# Pythonのファイル名を指定すると呼び出すことができる。
import expythontest
# この行の下にコードを配置します

# 出力を OUT 変数に割り当てます。
# Pythonのファイル名.関数名で呼び出すことが可能。
OUT = expythontest.add(1,2)

結果は表示した通り、無事に呼び出すことができた。

外部Python内で外部モジュールを指定したときには、Dynamo内でモジュールを読み込みに行ける環境を作成する必要があるので注意が必要である。

この記事が気に入ったらサポートをしてみませんか?