使用pythonnet实现C#调用Python时Runtime.PythonDLL只读无法修改如何解决
pythonnet Runtime.PythonDLL只读问题解决方案
根本原因
你通过NuGet安装的是pythonnet 3.0及以上版本,该版本起Runtime.PythonDLL被调整为只读属性,无法直接赋值修改,和旧版文档中直接赋值的配置逻辑不兼容。
两种可选解决方案
方案1:适配3.x版本的配置规则
在执行PythonEngine.Initialize()初始化Python引擎前,任选以下一种方式配置DLL路径即可:
- 直接调用
Runtime.Load方法传入DLL绝对路径
// 替换为你本地实际的python3xx.dll路径 Runtime.Load(@"C:\Python310\python310.dll"); PythonEngine.Initialize();
- 通过项目配置文件预置路径:在桌面项目的
App.config或Web项目的Web.config的appSettings节点下新增配置项:
<appSettings> <add key="PythonNet:PythonDll" value="C:\Python310\python310.dll" /> </appSettings>
程序启动时pythonnet会自动读取该配置项,无需额外代码赋值。
方案2:降级到兼容旧写法的2.x版本
如果你需要沿用原有直接赋值的代码逻辑,可以在NuGet包管理器中将pythonnet版本回退到2.5.2及以下版本,之后即可正常直接赋值:
Runtime.PythonDLL = @"C:\Python310\python310.dll"; PythonEngine.Initialize();
兼容性校验注意
- 你指定的Python DLL位数(32位/64位)必须和C#项目的生成目标位数保持一致
- pythonnet 3.x支持Python 3.6~3.11版本,2.x最高支持Python 3.9版本,请确保Python环境版本匹配
内容的提问来源于stack exchange,提问作者godordevil
相关产品推荐
相关产品推荐

