.net 使用Pythonnet和设置Runtime.PythonDLL属性时出现的问题

zxlwwiss  于 2023-02-10  发布在  .NET
关注(0)|答案(1)|浏览(1522)

我尝试通过Python使用. NET framework 4.8的程序集。我使用的是Python 3.10的3.0.1版本。Python的文档说明:
从3.0版开始,必须设置Runtime. PythonDLL属性或PYTHONNET_PYDLL环境变量,否则在调用Initialize时将收到BadPythonDllException(内部异常,派生自MissingMethodException)。典型值为python38.dll(Windows)、libpython3.8.dylib(Mac)、www.example.com(大多数其他类Unix操作系统)。libpython3.8.so (most other Unix-like operating systems).
然而,不幸的是,文档没有说明如何设置属性,我不知道如何设置。
当我尝试:

import clr
from pythonnet import load

load('netfx')

clr.AddReference(r'path\to\my.dll')

不出意外地出现了以下错误

Failed to initialize pythonnet: System.InvalidOperationException: This property must be set before runtime is initialized
   bei Python.Runtime.Runtime.set_PythonDLL(String value)
   bei Python.Runtime.Loader.Initialize(IntPtr data, Int32 size)
   bei Python.Runtime.Runtime.set_PythonDLL(String value)
   bei Python.Runtime.Loader.Initialize(IntPtr data, Int32 size)
[...]
in load
    raise RuntimeError("Failed to initialize Python.Runtime.dll")
RuntimeError: Failed to initialize Python.Runtime.dll

现在的问题是,在何处以及如何设置Runtime.PythonDLL属性或PYTHONNET_PYDLL环境变量
谢谢,延斯

wfsdck30

wfsdck301#

我相信这是因为import clr在内部调用pythonnet.load,而在您使用的pythonnet版本中,这种情况不会打印任何警告。
例如,正确的方法是在第一次调用import clr之前调用load

相关问题