- Home /
 
 
               Question by 
               williamtjy · Feb 10, 2020 at 10:59 PM · 
                errorerrormessage  
              
 
              How to solve Error “ImportException: Cannot import name RAND_egd” on IronPython in Unity
I am currently working on a project that requires the detection of few dominant colors from a picture and getting their colors to map onto a real world object. I've been searching for a way to do so but after one month of searching I found that using K-mean cluttering from a python tutorial seems to be exactly what I wanted to do. So currently I would like to use IronPython to run the python script from Unity itself and send data back to Unity through Socket.IO.
I received Error "ImportException: Cannot import name RAND_egd" when loading directory paths of python plugins and 3rd party plugins using IronPython on Unity
This is the code I use to execute my python script (Just want to clarify I am not an expert in terms of coding)
 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()));
     }
 
              
               Comment
              
 
               
              Your answer