参考文章:c#调用python脚本
最近项目中遇到使用C#调用Python的项目,其中涉及batchcompute库。遇到一些问题,记录一下。
- 项目使用的是IronPython 2.7.9版本包,需要在Nuget安装IronPython,
- 如果报错,需要更新Nuget版本则下载对应版本即可:https://dist.nuget.org/index.html
添加引用:IronPython.dll,Microsoft.Scripting.dll(在IronPython的安装目录中)
一、C#调用简单python文件
文件名未hello.py的python文件内部代码:
#文件目录 /Module/python/hello.py
import time
def welcome(name):
return "hello " + name
def Add(a, b):
return a + b
C#文件相关代码:
…
if (true)
{
Microsoft.Scripting.Hosting.ScriptRuntime pyRunTime = IronPython.Hosting.Python.CreateRuntime();
dynamic obj = pyRunTime.UseFile("Module/python/hello.py");
Console.WriteLine(obj.welcome("宝宝"));
Console.WriteLine(obj.Add(5, 7)); //方法名必须大小写区分正确
Console.ReadKey();
}
…
执行结果为:
二、C#调用含第三方库python文件
1、环境path写在C#文件中(未解决)
文件名未hello.py的python文件内部代码修改为:
import time
import batchcompute
from batchcompute import CN_ZHANGJIAKOU as REGION
from batchcompute import Client, ClientError
def welcome(name):
return "hello " + name
def Add(a, b):
return a + b
C#文件相关代码:
if (true)
{
var options = new Dictionary<string, object>();
options["Frames"] = true;
options["FullFrames"] = true;
var engine = IronPython.Hosting.Python.CreateEngine(options);
var scope = engine.CreateScope();
var paths = engine.GetSearchPaths();
paths.Add(@"C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib\site-packages\batchcompute-2.1.4-py3.8.egg");
paths.Add(@"C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib\site-packages");
paths.Add(@"C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib");
paths.Add(@"C:\Users\Administrator\AppData\Local\Programs\Python\Python38");
engine.SetSearchPaths(paths);
var source = engine.CreateScriptSourceFromFile("Module/python/hello.py"); //ListClusterInstances.py
source.Execute(scope);
var welcome = scope.GetVariable<Func<string, string>>("welcome");
var result1 = welcome("宝宝");
Console.WriteLine(result1);
var Add = scope.GetVariable<Func<int, int, int>>("Add");
var result2 = Add(5, 7).ToString();
Console.WriteLine(result2);
}
执行结果报出的错误始终是不知缘由,结果如下:
还望各路路过的大神能不吝赐教,指点一二,解除小白心中的疑惑
2、环境path写入python文件(已解决)
由参考文档看出 paths 添加的环境路径应放置在python文件中,而不是写在C#代码中。
意味着python代码如下:
import time
import sys
sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\')
sys.path.append('C:C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\setuptools-12.0.3-py2.7.egg')
sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\batchcompute-2.1.4-py3.8.egg')
import batchcompute
from batchcompute import CN_ZHANGJIAKOU as REGION
from batchcompute import Client, ClientError
def welcome(name):
return "hello " + name
def Add(a, b):
return a + b