在IronPython中导入外部模块

21 投票
3 回答
40390 浏览
提问于 2025-04-15 14:02

我现在正在开发一个用C#写的应用程序,并且在里面嵌入了IronPython。一般来说,我在这方面没有什么问题,但有一件事我不知道该怎么处理。

我想在脚本中导入一个外部模块。可是简单的 import ext_lib 并不管用。我是不是应该把这个库的路径加到 sys.path 里?或者说,把这个库的 .py 文件复制到应用程序的目录里,然后从那里导入?

补充:我最后选择了另一种解决方案——用 py2exe 编译了我的脚本,然后直接从主C#应用程序中用 Process 运行它(没有使用IronPython)。

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

3 个回答

3

如果你已经通过 NuGet 安装了 IronPython,并且想要使用 CPython 标准库 中的模块,那么最好的办法就是安装 IronPython.StdLib 这个 NuGet 包。这个包是和 IronPython 同一作者开发的。

13

很可能你的路径设置不正确。来自IronPython常见问题解答

我怎么使用CPython的标准库?

要告诉IronPython标准库的位置,你可以把CPython的“lib”目录添加到IronPython的路径中。具体做法是,把下面的代码放到IronPython的“site.py”文件里(把c:\python24\lib替换成你实际的CPython lib目录的路径):

import sys
sys.path.append(r"c:\python24\lib")

另外,如果你在CPython中遇到导入错误,而你电脑上确实有那个脚本,99%的情况下也是路径的问题。

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);

这样一来,如果库文件和你正在执行的脚本在同一个文件夹里,它们就可以被导入使用了。

撰写回答