c#与python 交互(调用第三方库失败,自己奋战了三天以失败而结尾,但是还是有些干货)-如果有人弄出来请告诉我


本人编程环境:VS2010 +anaconda
对于C#调用python 的想法是:c#拥有制作ui的优势,不管是winform 还是wpf,而Python做界面比较复杂,所以我想的是如果能调用python的一些第三方库,如
Numpy、scipy 等一些计算库引入,那么我用c#见面读取数据,把数据交给后台python处理,如回归、分类,然后再把数据传回来。也就是数据层、逻辑层交给python,ui层交给c#。但是不幸的是我这个配置了三天多,整整三天多,做梦都在想,可能我太笨了,网上的资料太少,而且质量层次不齐,都在边缘论述,我想想还是放弃吧,这是一个大坑!!!!


方法1:Ironpython(下载方法与方法2相同)原生的
具体方法:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
:::::
ScriptEngine pyEngine = Python.CreateEngine();
dynamic py = pyEngine.ExecuteFile(@"**.py");
(py.函数名)

注意:如果py文件中有第三方库,c#会报错-出现No module named **库,试了网上各种方法,总是不行。也就是py文件是自己写的纯代码,才能执行
如:

def f(x):
    if x==1:
        return 1
    else:
        return x*f(x-1)

关于调用第三库,网上有一种方法,需要加载第三方库的egg文件,我们平常pip 安装的是库文件是egg-info文件,如何生成egg文件,网上说easy_install **可以,但亲测不行。
请教别人,给的方法是:

pip install conda
python -m conda install numpy 

据说这样可以出来egg文件,但是在下载的过程中,出现anaconda 无法更新的错误,原因可能是:repo.continuum.io在国外,国内访问速度太慢而引起超时。
解决方法是:
(1)添加清华镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes 

(2)删除C:\Users\用户名名.condarc文件中的-default 行。
还有一种方法是下载某个库的源码,解压源码进入源码文件夹(此处打开命令行),然后使用命令 python setup.py install 来编译出来egg文件。对于python 2和python3,使用编译的c++版本不一样,它会报错提示你安装相应的编译器。我最开始下载numpy 源码,亲测这种方法能编译出来egg,但是按照https://www.cnblogs.com/monkeyfx/p/6522000.html#commentform 这篇作者的blog 方法,还是不能调用我的含有(import numpy)的python 脚本,出现各种错误。


按照https://www.cnblogs.com/monkeyfx/p/6522000.html#commentform 手动安装requests库,然后再运行,还是出错。
先是报错:No module named urllib3
再是报错:No module named http_client
自己都下载了这两个源码并编译成egg文件,还是报错,它奶奶的,不弄了。

方法2:pythonnet 库。
c#在nuget管理器下载pythonnet,个人觉得c#的nugget(配置方法-工具-扩展管理器-搜NuGet-出现nugetpackage manager下载安装)就好比python 的anconda navigator 可以下载各种库 。
这个pythonnet更是一个大坑,网上关于它的资料几乎没有,我去源码官网上看,copy 人家的demo,在c#中调用python 第三方库时,还是出现”没有该模块”的错误,按照官网上的错误解决方法,无效。给源码作者发了邮件,可惜自己英文太烂,交流不清,还被人家回了一句不要给他的私人邮件发消息。
小结:*关于Ironpython 和pythonnet*
Stackoverflow 上有人这样对比Ironpython 和pythonnet, Ironpython基本上是原生的(numpy scipy 是c写的,所以和ironpython可能不太友好,问了一些大佬,他们也没在ironpython上成功安装这两个库),而pythonnet,当其与python 的标准库接口时,表现很好。原话:Python.NET uses the standard CPython runtime,some of the standard python libraries don’t perform as well in IronPython。

转载自:https://blog.csdn.net/qq_15642411/article/details/79028855

You may also like...

退出移动版