- 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