これを回避するには、以下のように pyimport に reload とかをつける必要がある。
(たぶん python 側の制約じゃないかと思う。)
ここでは、test_py.py の中に test1() という関数がある場合とする。
まずは、python でどれを使っているかを明示して、
ENV["PYTHON"] = "/usr/bin/python"
それから、現在のディレクトリを python の path に通す。
using PyCall
if PyVector(pyimport("sys")["path"])[1] != ""
pushfirst!(PyVector(pyimport("sys")["path"]), "")
end
このあとは、
if @isdefined(test_py)
test_py = pyimport("importlib")["reload"](test_py)
else
test_py = pyimport("test_py")
end
とする。
初回は pyimport("test_py") で読み込めるが、2回目以降は読み込めないので、これを "reload" を使って再読み込みするようにしている。
このようにすれば、test_py.test1() としてモジュールの中の関数を呼び出すことができる。
0 件のコメント:
コメントを投稿