在IronPython中导入外部模块

21

我当前在使用C#编写的应用程序中嵌入IronPython。总体上,我没有遇到什么问题,但是有一件事情我不知道如何处理。

我想要将一个外部模块导入到脚本中,该怎么做呢?简单的import ext_lib并不能起作用。我应该将库的路径添加到sys.path中吗? 也许可以将库的 .py 文件复制到应用程序目录中并从那里进行导入吗?

编辑: 最终,我选择了另一个解决方案 - 使用py2exe编译我的脚本,并使用Process从主C#应用程序运行它(而不使用IronPython)。

无论如何,感谢您的帮助 ;)

3个回答

25

在使用PythonEngine编译脚本之前,我会将脚本所在的目录添加到引擎的搜索路径中。以下是我在C#代码中执行的操作:

string dir = Path.GetDirectoryName(scriptPath);                       
ICollection<string> paths = engine.GetSearchPaths();

if (!String.IsNullOrWhitespace(dir))
{
    paths.Add(dir);
}
else
{
    paths.Add(Environment.CurrentDirectory);
}
engine.SetSearchPaths(paths);

如果库和您要执行的脚本在同一目录中,它们就可以被导入。


1
如果我在调用SetSearchPaths(paths)后从paths中删除一个目录,引擎会知道吗?我有类似的设置,但我希望能够从不同的位置运行多个脚本。因此,我想在特定的脚本被执行后删除该脚本的搜索路径。 - DaveS

13

很可能您的路径设置不正确。来自IronPython FAQ

如何使用CPython标准库?

要告诉IronPython Python标准库在哪里,可以将CPython的“lib”目录添加到IronPython的路径中。为此,请将以下代码放入IronPython的“site.py”文件中(将c:\ python24 \ lib替换为实际路径):

import sys
sys.path.append(r"c:\python24\lib")
此外,如果您在CPython中为一个您已经在计算机上拥有的脚本遇到导入错误,99%的情况下也是路径问题。

我不明白这两行代码是否将sys导入IronPython?如果是的话,为什么在指定目录之前导入sys? - FabioSpaghetti

3

如果你已经从 NuGet 包中安装了 IronPython,并且想要使用来自 CPython标准库 的模块,那么最好的方法是安装 IronPython.StdLib NuGet 包,该包与 IronPython 相同作者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接