在Python.NET的官方网站上,它说它支持Python 3.8。大。 现在,我想从用C#开发的应用程序(.NET Framework v4.7.2)中调用现有的python 3.8模块。
编辑:
由于Python.NET的作者几乎没有提供有关C#调用的安装说明,所以我遵循了Python demo给出的说明。 请注意,我使用的是miniconda3和python 32位(我的项目需要后者),所以我做了以下工作:
在VScode中,我将pip install
以及所有必需的python软件包(出于示例的目的,在此使用numpy
)安装在“ C:\ ProgramData \ Miniconda3 \ envs \ py38_32“环境。
在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", pythonPath1, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("PYTHONPATH", pythonPath2, EnvironmentVariableTarget.Process);
引用了我项目中“ py38_32 \ Lib \ site-packages”文件夹中的Python.Runtime.dll,并添加了using Python.Runtime;
试图导入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可以正常工作。
知道这里发生了什么的任何人吗?
答案 0 :(得分:0)
安装Python.NET的官方方法是通过Python软件包管理器pip
。
在Windows上,该值为python.exe -m pip install pythonnet
。这将在您的Python发行版中的某个地方创建Python.Runtime.dll
。只需从您的项目中引用它,并确保体系结构匹配即可。
不支持的替代方法是使用my unofficial build,并将Runtime.PythonDLL
设置为您选择的python38.dll
的位置(您可以在运行时使用另一个NuGet程序包找到一个{{3} }。
答案 1 :(得分:0)
如here所述,Anaconda(和Miniconda)不适用于Python.NET。我要做的就是用我需要的所有软件包重新安装Python的新副本,并用新路径替换以下代码:
string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";