PYTHONNET_PYDLL 的 Python.NET 路径不适用于 python311.dll(但适用于 python38.dll)

问题描述 投票:0回答:1

我正在尝试为“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 并且它有效!

python c# .net python.net
1个回答
0
投票

任一路径有错误,或者 python311.dll 具有需要添加到

PATH
才能发现的依赖项。后者可以使用
dumpbin /dependents <dll>
检查(
dumpbin
是用VC++安装的)。

© www.soinside.com 2019 - 2024. All rights reserved.