我正在尝试从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。

10-04 15:28