Как решить ошибку «ImportException: невозможно импортировать имя RAND_egd» на Iron Python в Unity - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время я работаю над проектом, который требует обнаружения нескольких доминирующих цветов на изображении и получения их цветов для отображения на объекте реального мира. Я искал способ сделать это, но после одного месяца поиска я обнаружил, что использование беспорядка K-средних из учебника python кажется именно тем, что я хотел сделать. Поэтому в настоящее время я хотел бы использовать Iron Python для запуска сценария python из самого Unity и отправки данных обратно в Unity через Socket.IO.

Я получил ошибку «ImportException: Невозможно импортировать имя RAND_egd» при загрузке путей к каталогам плагинов python и сторонних плагинов, использующих Iron Python в Unity

. Этот код я использую для выполнить мой python скрипт (просто хочу уточнить, я не эксперт по кодированию)

 public void RunPython()
 {
     //  1) Create engine
     var engine = Python.CreateEngine();

     //  2) Provide script and arguments
     var script = @"D:/[MY DIRECTORY]/Assets/Python/Simulator.py";
     var source = engine.CreateScriptSourceFromFile(script);

     ICollection<string> Paths = engine.GetSearchPaths();
     Paths.Add("C:/Windows/SYSTEM32/python27.zip");
     Paths.Add("C:/Python27/DLLs");
     Paths.Add("C:/Python27/lib");
     Paths.Add("C:/Python27/lib/plat-win");
     Paths.Add("C:/Python27/lib/lib-tk");
     Paths.Add("C:/Python27");
     Paths.Add("C:/Users/[MY DIRECTORY]/AppData/Roaming/Python/Python27/site-packages");
     Paths.Add("C:/Python27/lib/site-packages");
     engine.SetSearchPaths(Paths);

     var argv = new List<string>();
     argv.Add("");
     argv.Add("2019-1-1");
     argv.Add("2019-1-22");

     engine.GetSysModule().SetVariable("argv", argv);


     //  3) Output redirect
     var eIO = engine.Runtime.IO;

     var errors = new MemoryStream();
     eIO.SetErrorOutput(errors, Encoding.Default);

     var results = new MemoryStream();
     eIO.SetOutput(results, Encoding.Default);


     //  4) Execute script
     var scope = engine.CreateScope();
     source.Execute(scope);


     //  5) Display output
     string str(byte[] x) => Encoding.Default.GetString(x);

     Console.WriteLine("ERRORS:");
     Console.WriteLine(str(errors.ToArray()));
     Console.WriteLine();
     Console.WriteLine("Results:");
     Console.WriteLine(str(results.ToArray()));
 }
...