如何在C#中运行Python模块?
我这两天一直在琢磨,想知道能不能在C#里运行一个Python模块。我关注的模块是Sympy,大家可以在这里找到它:http://code.google.com/p/sympy/(如果有人感兴趣的话)。这是一个数学库,正好满足我的需求。我还没找到哪个C#库能做到这一点(我试过math.net和其他一些库……)
通过在谷歌上搜索,我发现可以用IronPython在C#中执行Python代码。不过,我没有找到什么好的例子来展示如何用IronPython或者PythonNet来使用模块。
有没有人能告诉我,能不能在C#中使用Python模块?你们推荐IronPython还是PythonNet?另外,如果可以的话,是否意味着我的应用程序需要安装Python编译器才能运行,还是说只需要引用的dll就够了?
2 个回答
我知道这个问题有点老了,但可能会对某些人有帮助 :)
你可以把你的 Python 脚本放到 Anaconda3\Lib\site-packages 文件夹里,然后参考他们 wiki 页面上的 pythonnet 示例:
static void Main(string[] args)
{
using (Py.GIL())
{
dynamic foo = Py.Import("your_script_name");
}
}
而且提到的 dll 文件应该能解决问题。至于 Iron Python,我觉得它只支持 Python 2.x,而且作者已经不再维护了,所以可能会有点复杂。
另外,你可能需要注意一下 IIS 的线程问题和 Python 的全局解释器锁(GIL),这可能会在一段时间后变得非常麻烦。
我不知道在C#中加载一个Python库效果如何,但我会选择用IronPython来写我的程序。
这样你可以把它编译成一个exe文件,这样用户就看不出有什么不同了。
这只是我的猜测,但也许你可以把这个程序集加载到其他C#项目中,像这样使用。也就是说,用IronPython把Python库封装起来,然后在C#中加载它。
虽然这不是最优雅的做法,但我敢打赌它是可行的。