我正在尝试从https://github.com/pythonnet/pythonnet运行.NET示例中的Embedding Python。我关注了疑难解答文章,以将正确的%PYTHONPATH%和%PYTHONHOME%设置为程序基本目录中的anaconda环境。
激活anaconda环境后,我已成功导入sys和imp作为测试,并成功使用了PythonEngine.RunSimpleString(),但numpy示例因Python.Runtime.PythonException而失败:ImportError:没有名为“ numpy”的模块
在此环境中从python导入numpy成功,但是此包和其他软件包无法在pythonnet中导入。
Pythonnet版本:2.3 x64(使用conda install -c pythonnet pythonnet安装)
Python版本:Python 3.5 x64(anaconda)
作业系统:Windows 10
以下代码产生错误:
static void Main(string[] args)
{
string envPythonHome = AppDomain.CurrentDomain.BaseDirectory + "cntk-py35";
string envPythonLib = envPythonHome + @"\Lib";
Environment.SetEnvironmentVariable("PYTHONHOME", envPythonHome, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("PATH", envPythonHome + ";" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine), EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("PYTHONPATH", envPythonLib, EnvironmentVariableTarget.Process);
PythonEngine.PythonHome = envPythonHome;
PythonEngine.PythonPath = Environment.GetEnvironmentVariable("PYTHONPATH");
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
dynamic sin = np.sin;
Console.WriteLine(sin(5));
double c = np.cos(5) + sin(5);
Console.WriteLine(c);
dynamic a = np.array(new List<float> { 1, 2, 3 });
Console.WriteLine(a.dtype);
dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32);
Console.WriteLine(b.dtype);
Console.WriteLine(a * b);
Console.ReadKey();
}
}
看来,在我的环境中,site-packages下的所有软件包都同样失败。添加到%PATH%无效。有没有办法让pythonnet识别并加载这些模块?
最佳答案
我可以通过将Lib / site-packages添加到PYTHONPATH变量(而不是PATH)来导入模块,该变量将文件夹添加到sys.path。任何其他python库和自定义python代码都必须将相应的文件夹添加到PYTHONPATH。