IronPython, импорт модулей - PullRequest
       2

IronPython, импорт модулей

3 голосов
/ 14 сентября 2010

Я следую примеру от лучшего ответа здесь до T, компилируя с Pyc.py.

Сборка скриптов Python и вызов методов из C #

Я получаюисключение на pyScope = pyEngine.ImportModule("MyClass");

no module named MyClass

Я считаю, что это ошибка, поскольку иногда перекомпиляция с Pyc.py приводит к распознаванию dll ImportModule, но в других случаях это не так.ЗАКЛЮЧЕНИЕ: как отмечено ниже digEmAll, компиляция модулей с Pyc.py для использования таким образом приводит к случайным результатам.Вместо этого вызовите clr.CompileModules вручную.

1 Ответ

7 голосов
/ 14 сентября 2010

OK, Я понял.

Имя модуля - это (с учетом регистра) имя исходного модуля .py, а не скомпилированная dll.

Я имею в виду, если ваше первоначальное имя модуля было myClass.py, то вы скомпилировали его в MyClass.dll, вы должны ImportModule("myClass") не ImportModule("MyClass")


EDIT:

предыдущий код ссылается на следующий метод компиляции:

import clr
clr.CompileModules("CompiledScript.dll", "script.py")

Наоборот, при использовании pyc.py сгенерированная dll содержит модуль с именем __main__ вместо .py имени файла.

Это очень странно ...

IIRC, в python сам модуль вызывает __main__, если он работает автономно (т.е. не вызывается другим), но я все еще не понимаю соединение ...

...