2

我无法让 StdLib 的编译版本正常工作。

我创建了一个空的 Visual Studio 项目(称为 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");

我的问题是

  1. 您可以通过 Visual Studio 将标准库编译成 .Net 程序集吗?

  2. 如果是这样,Lib 文件夹中的 .py 代码文件的构建操作应该是什么?

  3. 那么在尝试导入标准库模块时引用程序集以免失败的正确方法是什么?

我查看了以下帖子:IronPython:使用 pyc.py 编译的 EXE 无法导入模块“os”

但实际上并没有安装 IronPython 并且不太确定这是否是解决方法。我使用 NUGET 将 IronPython 和 IronPython.StdLib 直接添加到我的项目中。我假设因为我可以通过 NUGET 将 IronPython.StdLib 直接添加到我的项目中,所以我可以编译它并引用它。

4

1 回答 1

3

不,您将无法通过 Visual Studio 编译它(还)。如果您愿意,您必须下载 IronPython并使用 pyc.py 从命令行执行此操作。

Eventually I'll have NuGet packages for pre-zipped and pre-compiled version of the stdlib, but I just haven't got to it yet.

于 2013-02-01T20:10:43.883 回答