我无法使StdLib的编译版本正常工作。
我创建了一个空的visual studio项目(称为StdLib)并使用NUGET加载了最新的(v2.7.3)IronPython.StdLib,它在我的项目中使用所有.py脚本创建了一个Lib文件夹。默认情况下,这些文件的构建操作设置为“content”,但尝试使用该设置和“嵌入资源”进行编译。
在我的py脚本中我有:
import clr
clr.AddReference("StdLib")
import os
它找到程序集但抛出“os module not found”错误。
如果我将标准库文件打包为build文件夹中的松散文件,并执行以下操作。
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: EXE compiled using pyc.py cannot import module "os"
但实际上并没有安装IronPython,也不确定是否可以采用这种方法。我使用NUGET将IronPython和IronPython.StdLib直接添加到我的项目中。我假设因为我可以通过NUGET将IronPython.StdLib直接添加到我的项目中,我可以编译它并引用它。
答案 0 :(得分:3)
不,您将无法通过Visual Studio(尚未)编译它。如果你愿意,你必须download IronPython并使用pyc.py从命令行执行此操作。
最终我会为stdlib的预压缩和预编译版本提供NuGet包,但我还没有完成它。