Проблемы с импортом сторонних модулей при размещении IronPython в SL

Я размещаю Python в приложении SL. По сути, у меня есть прикрепленное свойство, которое позволяет вам передавать скрипт Python, который затем выполняется в случае потери фокуса элемента.

Интеграция с IPY работает нормально, пока мне не нужен импорт третьих лиц. Я скопировал пакет formencode в папку site-packages в папке Program Files\Iron Python..., а затем попытался импортировать formencode как программно, используя ScriptEngine.ImportModule, так и встроенный. В каждом случае модуль не найден.

Мой код установки для хоста DLR выглядит следующим образом:

        var setup = new ScriptRuntimeSetup();
        setup.HostType = typeof(BrowserScriptHost);
        setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
        setup.Options["SearchPaths"] = new string[] { string.Empty };

        _runtime = new ScriptRuntime(setup);
        _engine = _runtime.GetEngine("Python");
        _scope = _engine.CreateScope();
        _engine.ImportModule("formencode");

Любая помощь будет оценена по достоинству.


person Glenn Block    schedule 10.09.2009    source источник


Ответы (2)


Код хостинга DLR, который у вас есть, выглядит хорошо, но вы указали неверный код formencode:

Я скопировал пакет formencode в папку site-packages в папке Program Files\Iron Python.

строка setup.HostType = typeof(BrowserScriptHost) заставляет IronPython искать в файле XAP все операции с файловой системой, включая «импорт». Вам нужно будет скопировать formencode.py в проект Silverlight вашего хоста и убедиться, что для параметра «Копировать локально» установлено значение «True», чтобы он попал в XAP. Тогда импорт будет работать.

Это ожидаемо, потому что Silverlight не может читать из любого места в файловой системе вашей операционной системы, так как он должен работать на всех машинах :)

person Jimmy Schementi    schedule 10.09.2009
comment
Спасибо, Джимми, я попробую. Знаете какой-нибудь простой способ добавить файлы в XAP? Делать это вручную - настоящая боль. - person Glenn Block; 10.09.2009
comment
Chiron.exe — предпочтительный инструмент; он создаст файл XAP из любой папки. - person Jimmy Schementi; 15.09.2009

Я не пытался сделать именно это, но обнаружил, что для включения сторонних сборок (физический движок farseer в моем случае) мне нужно было включить сборку в XAP и сослаться на нее в App.manifest.

Но что меня действительно зацепило, так это то, что я должен был ссылаться на сборку с ее строгим именем (что мне нужно было делать только в SL, локально я мог просто использовать имя сборки).

Надеюсь, это поможет, и мне будет интересно посмотреть, как вы в конечном итоге разрешите это.

person tarn    schedule 10.09.2009