在IronPython中导入外部模块

时间:2009-09-03 07:50:17

标签: python import ironpython

我目前正在研究用C#编写的应用程序,我正在将IronPython嵌入其中。我通常没有任何问题,但有一件事我不知道如何处理。

我想将外部模块导入脚本。我怎样才能做到这一点?简单的import ext_lib不起作用。我应该将lib的路径添加到sys.path吗? 也许可以将lib的.py文件复制到app目录并从那里导入?

修改 我最终选择了另一个解决方案 - 使用py2exe编译我的脚本,我只是使用Process从主C#app运行它(不使用IronPython)。

无论如何,谢谢你的帮助;)

3 个答案:

答案 0 :(得分:23)

在使用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 :(得分:10)

您的路径设置不正确。来自the IronPython FAQ

  

如何使用CPython标准库?

     

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

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

此外,如果您在计算机上为 所拥有的脚本在CP​​ython中获得导入错误,那么99%的时间也会出现路径问题。

答案 2 :(得分:0)

如果您已经从 IronPython 软件包安装了 NuGet 并且您想要来自 CPython Standard Library 的模块,那么最好的方法是安装 IronPython.StdLib {{1} } 包来自 NuGet 的同一作者。