IronPython sys._getframe не найден

В настоящее время я создаю программу на С#, которая будет вызывать функции в предоставленных файлах python script.
Некоторые из этих файлов script вызывает _getframe() в sys, что приводит к ошибке:

System.MissingMemberException: объект 'module' не имеет атрибута '_getframe'

(Так как у IronPython по умолчанию не активирован _getframe.)

Я сделал довольно много googling и узнал, что вы можете активировать его в ipy.exe, предоставив -X:Frames в качестве параметра командной строки, однако это не решает мою проблему, поскольку я не использую напрямую ipy.exe для выполнения кода python.

В этой теме они упоминают о перестройке IronPython из источника с параметрами командной строки, я загрузил исходные файлы, но понятия не имею, как построить его с этими параметрами. < ш > Также они упоминают, что параметры находятся в официальном инсталляторе, я несколько раз запускал программу установки exe, но не видел таких опций там.

Ответ 1

При создании PythonEngine вы можете передать словарь опций; вам просто нужно установить ключи "Frames" и/или "FullFrames" в словаре на true:

var options = new Dictionary<string, object>();
options["Frames"] = true;
options["FullFrames"] = true;
ScriptEngine engine = Python.CreateEngine(options);

Если вы не хотите FullFrames, просто оставьте его или установите на false.

Ответ 2

Немного вне сферы действия вопроса, но предназначен для всех, кто получает эту ошибку, вызывая Python script напрямую с помощью интерпретатора ipy.exe.

Вы можете просто добавить аргумент -X:FullFrames. Например, вызовите script как

ipy.exe -X:FullFrames script.py