問題内容
Pythonマクロ内でトップレベルに import したモジュールや定義した変数を、同じスクリプト内で定義した関数から参照できません。
通常のPythonスクリプトとは異なる名前空間の動作になっているようです。
例えば、以下は正常に動作します。
import SakuraEditor
SakuraEditor.InsText("ABC")
一方、同じ処理を関数にすると、
import SakuraEditor
def test():
SakuraEditor.InsText("ABC")
test()
以下のエラーになります。
name 'SakuraEditor' is not defined
トップレベルで定義した変数についても同様です。
また、マクロ内で以下を実行して locals() の内容を globals() にコピーすると正常に動作しました。
globals().update(locals())
ソースコードを確認したところ、CPythonMacroManager.cpp では以下のように globals と locals に別々の辞書を渡しているように見えました。
PyObject* pGlobals = PyModule_GetDict(pMain);
PyObjectPtr pLocals = PyDict_New();
PyEval_EvalCode(pCode, pGlobals, pLocals);
トップレベルの import や代入が pLocals に格納される一方、そこで定義した関数のグローバル名前空間は pGlobals となるため、関数内からトップレベルの名前を参照できなくなっているのではないかと思います。
通常のPythonスクリプトと同じ名前解決になるのが期待する動作ではないかと思います。
再現手順
- Pythonマクロを実行できる状態にする
- 以下のPythonマクロを登録する
import SakuraEditor
def test():
SakuraEditor.InsText("ABC")
test()
- マクロを実行する
- 以下のエラーが表示される
name 'SakuraEditor' is not defined
以下のように直接呼び出した場合は正常に動作します。
import SakuraEditor
SakuraEditor.InsText("ABC")
また、以下のように globals().update(locals()) を追加すると正常に動作します。
import SakuraEditor
def test():
SakuraEditor.InsText("ABC")
globals().update(locals())
test()
再現頻度
毎回再現します。
問題のカテゴリ
環境情報
- OS バージョン
- サクラエディタバージョン
- サクラエディタ32bit Ver. 2.4.3.7173 GHA (fe1a4a2)
- GitHash: fe1a4a2
- Compile Info: V1951 WPR WINa00/Ia00/Na00
- Last Modified: 2026/8/8 05:22:56
- Python
スクリーンショット
name 'SakuraEditor' is not defined と表示されるエラーダイアログのスクリーンショットを添付します。

問題内容
Pythonマクロ内でトップレベルに
importしたモジュールや定義した変数を、同じスクリプト内で定義した関数から参照できません。通常のPythonスクリプトとは異なる名前空間の動作になっているようです。
例えば、以下は正常に動作します。
一方、同じ処理を関数にすると、
以下のエラーになります。
トップレベルで定義した変数についても同様です。
また、マクロ内で以下を実行して
locals()の内容をglobals()にコピーすると正常に動作しました。ソースコードを確認したところ、
CPythonMacroManager.cppでは以下のようにglobalsとlocalsに別々の辞書を渡しているように見えました。PyObject* pGlobals = PyModule_GetDict(pMain); PyObjectPtr pLocals = PyDict_New(); PyEval_EvalCode(pCode, pGlobals, pLocals);トップレベルの
importや代入がpLocalsに格納される一方、そこで定義した関数のグローバル名前空間はpGlobalsとなるため、関数内からトップレベルの名前を参照できなくなっているのではないかと思います。通常のPythonスクリプトと同じ名前解決になるのが期待する動作ではないかと思います。
再現手順
以下のように直接呼び出した場合は正常に動作します。
また、以下のように
globals().update(locals())を追加すると正常に動作します。再現頻度
毎回再現します。
問題のカテゴリ
環境情報
PATHに追加し、Pythonマクロ自体が正常に実行できる状態で確認 (参考: [Pythonマクロ] Pythonフォルダーを指定してもPythonマクロ実行時にsakura.exeが終了する #2607)スクリーンショット
name 'SakuraEditor' is not definedと表示されるエラーダイアログのスクリーンショットを添付します。