Python调用C#函数报错:Failed to initialize Python.Runtime.dll
解决Python调用C# DLL时的Runtime初始化错误
错误原因
Anaconda环境里Python的DLL路径和pythonnet默认查找路径不匹配,再加上代码初始化顺序错了——PythonDLL属性必须在pythonnet运行时启动前设置,但原代码先定义了函数才加载pythonnet,导致初始化时机不对,触发报错。
修正步骤与代码
- 先指定PythonDLL路径:找到你Anaconda环境里的python310.dll(对应Python3.10版本),把路径写对
- 调整初始化顺序:先搞定pythonnet的加载和clr导入,再写调用C#函数的逻辑
- 修正函数调用参数:保证
solve_it的调用参数和定义一致
修正后的代码:
# 替换成你自己的Anaconda环境路径 import sys sys.path.append(r"C:\ProgramData\Anaconda3\envs\你的环境名称") import Python.Runtime Python.Runtime.PythonDLL = r"C:\ProgramData\Anaconda3\envs\你的环境名称\python310.dll" # 加载pythonnet并导入clr from pythonnet import load load('netfx') import clr # 替换成你的DLL实际路径,建议用绝对路径 clr.AddReference(r'path/to/dll/DiscreteOptimizationSolutions.dll') from DiscreteOptimizationSolutions import Assignment1 # 定义调用C#的函数 def solve_it(input_data): assignment1Object = Assignment1() return assignment1Object.Assignment1Solution() # 调用函数(按需传入input_data参数) result = solve_it('') print('This script submits the integer: %s\n' % result)
额外注意点
- 确认Anaconda环境路径和Python DLL文件名对应(Python3.10就是python310.dll)
- 保证
DiscreteOptimizationSolutions.dll的路径正确,要么用绝对路径,要么把DLL所在目录加到系统环境变量里 - 如果还是报错,检查Python和C# DLL的架构是否一致(都是32位或都是64位),或者尝试用管理员身份运行脚本
内容的提问来源于stack exchange,提问作者Curious Iitian
相关产品推荐
相关产品推荐

