首页 > 解决方案 > 如何在 C# 中运行自己导入 3rd 方库的外部 python 脚本?

问题描述

我试图将 Python 代码与 C# 结合起来,以在我的 C# 应用程序中使用所有那些很酷的库,如语音识别。

我为python(IronPython)做了两个不同的项目,其中我通过VS2017中的python环境包含了我需要的模块(Speech Recognition),另一个只是我想调用这个应用程序的控制台应用程序。

我认为重点是更改 Ironpython 的 searchPaths ,然后它会起作用。

也许我做错了什么,或者它不应该工作?


C# 代码 Main.cs:

using IronPython.Hosting;
using System.Collections.Generic;
private static void Main(string[] args)
    {
        //Using Iron python
        var engine = IronPython.Hosting.Python.CreateEngine();
        System.Console.WriteLine("Search paths:");
        ICollection<string> searchPaths = engine.GetSearchPaths();
        foreach (string path in searchPaths)
        {
            System.Console.WriteLine(path);
        }
        System.Console.WriteLine();           
        searchPaths.Add("..\\..");
        ///Trying to add a searchPath for the place with the module I need
        searchPaths.Add(@"C:\Program Files (x86)\Microsoft Visual
        Studio\Shared\Anaconda3_64\Lib\site-packages");
        engine.SetSearchPaths(searchPaths);
        var res = engine.CreateScriptSourceFromFile(
        @"D:\Python\Projects\TestSpeechRecognition
        \TestForNETinPython\TestForNETinPython.py"
        );
        engine.ImportModule("speech_recognition");
        var result = res.Execute();
   }

Python代码

 import speech_recognition as sr
 r = sr.Recognizer()
 with sr.Microphone() as source: 
    print ("Hello: ")
    audio = r.listen(source)
 try:
   print ("I said: " + r.recognize_google(audio))
except sr.UnknownValueError:
   print ("Cant't rec")
except sr.RequestError as e:
   print ("Can't connect: (0)".format(e))

例外:

未处理的异常:IronPython.Runtime.Exceptions.ImportException:Test.Program 中 IronPython.Hosting.PythonService.ImportModule(ScriptEngine 引擎,字符串名称)的 IronPython.Hosting.Python.ImportModule(ScriptEngine 引擎,字符串模块名称)中没有名为 Speech_recognition 的模块。 D:\Python\Projects\TestSpeechRecognition\Test\Program.cs:line 26 中的 Main(String[] args)

我什至阅读了一些关于创建模块的文献,例如http://www.needfulsoftware.com/IronPython/IronPythonCS2或这个用于 pythonnet 的模块,有点令人毛骨悚然,但我想它可能有用(NoteBook)。
希望有人可以用它来解决问题。

标签: c#pythonvisual-studiospeech-recognitionironpython

解决方案


推荐阅读