SLでIronPythonをホストするときにサードパーティのモジュールをインポートできない
-
05-07-2019 - |
質問
PythonをSLアプリでホストしています。基本的に、Pythonスクリプトを渡すことができる添付プロパティがあります。このスクリプトは、エレメントの失われたフォーカスイベントで実行されます。
IPY統合は、サードパーティのインポートを必要としない限り問題なく機能します。 formencodeパッケージをProgram Files \ Iron Pythonの下のsite-packagesフォルダーにコピーしてから、ScriptEngine.ImportModuleとインラインを使用してプログラムでformencodeをインポートしようとしました。いずれの場合も、モジュールは見つかりません。
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パッケージをProgram Files \ Iron Pythonの下のsite-packagesフォルダーにコピーしました
setup.HostType = typeof(BrowserScriptHost)
行により、IronPythonはXAPファイルで" import"を含むすべてのファイルシステム操作を検索します。 formencode.pyをホストのSilverlightプロジェクトにコピーし、「ローカルにコピー」を確認する必要があります。は「True」に設定されています;そのため、XAPに組み込まれます。その後、インポートします。
これは、Silverlightがオペレーティングシステムのファイルシステム上のどの場所からも読み取ることができないためです。すべてのマシンで動作する必要があるためです:)
他のヒント
私はこれを正確にやろうとしませんでしたが、サードパーティのアセンブリ(私の場合はファーサー物理エンジン)を含めるには、XAPにアセンブリを含めてApp.manifestで参照する必要があることに気付きました。
しかし、本当に私を捕まえたのは、厳密な名前でアセンブリを参照しなければならなかったことです(SLで行う必要があり、ローカルではアセンブリ名を使用するだけでした)。
これがお役に立てば幸いです。どうすれば解決できるか興味があります。