我正在尝试为“PYTHONNET_PYDLL”设置自定义路径,当目标 Python 版本为 3.8 时它可以正常工作,但当 Python 版本为 3.11 时它无法工作
这是我的(工作)代码:
System.Environment.SetEnvironmentVariable("PYTHONHOME", @"D:\Test\CondaTest8");
System.Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", @"D:\Test\CondaTest8\python38.dll");
PythonEngine.Initialize();
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
}
PythonEngine.Shutdown();
并且不工作:
System.Environment.SetEnvironmentVariable("PYTHONHOME", @"D:\Test\CondaTest");
System.Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", @"D:\Test\CondaTest\python311.dll");
PythonEngine.Initialize();
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
}
PythonEngine.Shutdown();
以错误结束:
System.TypeInitializationException:类型初始值设定项 “代表们”抛出了一个例外。 ---> System.DllNotFoundException: 无法加载 D:\Test\CondaTest\python311.dll。 ---> System.ComponentModel.Win32Exception:指定的模块无法 被发现。
我需要使用 MiniConda 创建几个独立的便携式 Python 解释器,并且它们(3.8 和 3.11)都是以完全相同的方式创建的,但由于某种原因 3.8 可以完美地工作,而 3.11 则不能。 Python.NET 版本为 3.0.3。 当然路径是正确的。 如何将 Python 3.11 与 Python.NET 一起使用?
PS。现在我正在使用 CliWrap 的解决方法,从前面提到的相同 Python 解释器执行 script.py trought python.exe 并且它有效!
任一路径有错误,或者 python311.dll 具有需要添加到
PATH
才能发现的依赖项。后者可以使用dumpbin /dependents <dll>
检查(dumpbin
是用VC++安装的)。