如何在Windows 10和Python 3.8上为C#VS2019安装Python.NET?

问题描述

在Python.NET的官方网站上,它说它支持Python 3.8。大。 现在,我想从用C#开发的应用程序(.NET Framework v4.7.2)中调用现有的python 3.8模块。

编辑:

由于Python.NET的作者几乎没有提供有关C#调用的安装说明,所以我遵循了Python demo给出的说明。 请注意,我使用的是miniconda3和python 32位(我的项目需要后者),所以我做了以下工作:

  1. 在VScode中,我将pip install以及所有必需的python软件包(出于示例的目的,在此使用numpy)安装在“ C:\ ProgramData \ Miniconda3 \ envs \ py38_32“环境。

  2. 在C#中设置环境路径(在VS2019中):

    string pythonPath1 = @"C:\ProgramData\Miniconda3\envs\py38_32";
    string pythonPath2 = @"C:\ProgramData\Miniconda3\envs\py38_32\Lib\site-packages";
    Environment.SetEnvironmentvariable("PATH",pythonPath1,EnvironmentvariableTarget.Process);
    Environment.SetEnvironmentvariable("PYTHONHOME",EnvironmentvariableTarget.Process);
    Environment.SetEnvironmentvariable("PYTHONPATH",pythonPath2,EnvironmentvariableTarget.Process);
  1. 引用了我项目中“ py38_32 \ Lib \ site-packages”文件夹中的Python.Runtime.dll,并添加using Python.Runtime;

  2. 试图导入numpy:

    using (Py.GIL())
    {
        dynamic np = Py.Import("numpy"); //fail on this line with ImportError
    }
    

在numpy导入时失败,并显示“ Python.Runtime.PythonException:'ImportError”。它还说:“ Python版本是:来自“ \ bin \ Debug \ MyProject.exe”的python3.8。。。似乎是在我的调试文件夹中寻找python,而不是上面提到的路径。使用相同的环境从VScode导入numpy可以正常工作。

知道这里发生了什么的任何人吗?

解决方法

安装Python.NET的官方方法是通过Python软件包管理器pip

在Windows上,该值为python.exe -m pip install pythonnet。这将在您的Python发行版中的某个地方创建Python.Runtime.dll。只需从您的项目中引用它,并确保体系结构匹配即可。

不支持的替代方法是使用my unofficial build,并将Runtime.PythonDLL设置为您选择的python38.dll的位置(您可以在运行时使用另一个NuGet程序包找到一个{{3} }。

,

here所述,Anaconda(和Miniconda)不适用于Python.NET。我要做的就是用我需要的所有软件包重新安装Python的新副本,并用新路径替换以下代码:

string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";