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

StackOverflow https://stackoverflow.com/questions/1403384

Вопрос

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

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

Мой установочный код для хоста 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");

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

Это было полезно?

Решение

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

  

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top