我尝试通过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环境变量
谢谢,延斯
1条答案
按热度按时间wfsdck301#
我相信这是因为
import clr
在内部调用pythonnet.load
,而在您使用的pythonnet版本中,这种情况不会打印任何警告。例如,正确的方法是在第一次调用
import clr
之前调用load
。