StdLib のコンパイル済みバージョンを動作させることができません。
空のビジュアル スタジオ プロジェクト (StdLib と呼ばれる) を作成し、最新の (v2.7.3) IronPython.StdLib をロードした NUGET を使用して、プロジェクト内にすべての .py スクリプトを含む Lib フォルダーを作成します。これらのファイルのビルド アクションはデフォルトで「コンテンツ」に設定されていますが、その設定と「埋め込みリソース」の両方でコンパイルを試みました。
私のpyスクリプトには次のものがあります:
import clr
clr.AddReference("StdLib")
import os
アセンブリは見つかりますが、「os モジュールが見つかりません」というエラーがスローされます。
標準ライブラリ ファイルをビルド フォルダーにルーズ ファイルとしてパッケージ化し、次のようにすると動作します。
var runtime = Python.CreateRuntime();
var engine = Python.GetEngine(runtime);
engine.SetSearchPaths(new string[] { Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + @"\Lib" });
////load the script
dynamic script = runtime.UseFile(ParserScriptPath);
//execute the script
var result = script.main("result");
私の質問は
Visual Studio を使用して、標準ライブラリを .Net アセンブリにコンパイルできますか?
その場合、Lib フォルダー内の .py コード ファイルのビルド アクションはどのようにする必要がありますか?
では、標準ライブラリ モジュールをインポートしようとしたときに失敗しないようにアセンブリを参照する適切な方法は何ですか?
次の投稿を確認しました: IronPython: pyc.py を使用してコンパイルされた EXE はモジュール "os" をインポートできません
しかし、実際には IronPython がインストールされておらず、それがその方法であるかどうかはよくわかりません。NUGET を使用して、IronPython と IronPython.StdLib の両方をプロジェクトに直接追加しました。NUGET を介して IronPython.StdLib をプロジェクトに直接追加できるので、コンパイルして参照するだけでよいと思いました。