在IronPython中导入外部模块
我现在正在开发一个用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);
这样一来,如果库文件和你正在执行的脚本在同一个文件夹里,它们就可以被导入使用了。