我目前正在研究用C#编写的应用程序,我正在将IronPython嵌入其中。我通常没有任何问题,但有一件事我不知道如何处理。
我想将外部模块导入脚本。我怎样才能做到这一点?简单的import ext_lib
不起作用。我应该将lib的路径添加到sys.path
吗?
也许可以将lib的.py文件复制到app目录并从那里导入?
修改
我最终选择了另一个解决方案 - 使用py2exe
编译我的脚本,我只是使用Process
从主C#app运行它(不使用IronPython)。
无论如何,谢谢你的帮助;)
答案 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")
此外,如果您在计算机上为 所拥有的脚本在CPython中获得导入错误,那么99%的时间也会出现路径问题。
答案 2 :(得分:0)
如果您已经从 IronPython
软件包安装了 NuGet
并且您想要来自 CPython Standard Library
的模块,那么最好的方法是安装 IronPython.StdLib
{{1} } 包来自 NuGet
的同一作者。