C#通过pythonnet直接调用Python
1、下载python-embed版本
可以百度获得到,这个可以不需要安装python,并且不受限与电脑本地的版本
2、解压并且把涉及的包复制进去
pip下来的包在安装目录下,\Lib\site-packages
同时把需要运行的脚本也放进去
脚本对外建议尽量用基本的数据类型,不要在C#内执行过多操作!!!!
3、在C#项目中Nuget得到pythonnet
这里要注意,这玩意对net版本有要求,注意匹配
4、将刚刚准备好的Python文件夹放到执行exe的文件夹下
这个是用于等会程序中调用
5、先初始化各种位置
这里注意配置,不然后面执行会抛出异常
//python环境配置(python-3.10.11-embed解压后文件夹位置,使用到的模块文件夹pip下载后,也复制到此文件夹下)
string FilePath = System.AppDomain.CurrentDomain.BaseDirectory;
string pythonHomePath = FilePath + "\\python310";
string dllPath = pythonHomePath + "\\python310.dll";
Runtime.PythonDLL = dllPath;//设置dll位置
PythonEngine.PythonHome = pythonHomePath;//设置python文件夹位置
PythonEngine.Initialize();//初始化
PythonEngine.BeginAllowThreads();//多线程初始化
这个只需要执行一次,多线程那一行按需执行
6、调用Python的程序
string Res = "";
//调用python
using (var _ = Py.GIL())
{
dynamic nx = Py.Import("JsonNetCal");//调用模块
Res = nx.CalHashByJson(JsonData);//执行函数
}
这里因为使用了dynamic,会各种不方便,所有不建议在这里执行过多的内容。