在.NET Core3.1 WPF中调用Python3.8模块遇System.DllNotFoundException错误求助
解决.NET Core 3.1 WPF调用Python 3.8模块时的DllNotFoundException
核心问题排查与修复步骤:
修正PYTHONNET_PYDLL环境变量
你当前设置的PYTHONNET_PYDLL指向Python安装目录,这是错误的,必须指定具体的Python动态链接库路径:Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", Path.Combine(pyInstallDir, "python38.dll"), EnvironmentVariableTarget.Process);正确设置PATH环境变量(避免覆盖原有路径)
直接替换PATH会导致系统丢失其他必要依赖路径,应采用追加方式:string existingPath = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("PATH", $"{pyInstallDir};{Path.Combine(pyInstallDir, @"DLLs")};{existingPath}", EnvironmentVariableTarget.Process);额外添加
DLLs目录是为了确保Python的依赖库能被正确加载。确认Python.Runtime.dll的兼容性
- 确保引用的
Python.Runtime.dll是通过pip install pythonnet为Python3.8安装的版本,路径为C:\Python38\Lib\site-packages\Python.Runtime.dll - 检查项目平台目标:若Python是64位,将WPF项目的平台目标设为
x64(右键项目→属性→生成→平台目标),禁止使用Any CPU——pythonnet不支持跨位调用。
- 确保引用的
初始化Python.Runtime的正确流程
在使用Py.GIL()之前必须先初始化Python运行时,添加完整流程代码:// 应用启动时执行一次初始化 PythonEngine.Initialize(); try { using (Py.GIL()) { dynamic np = Py.Import("numpy"); // 可添加测试代码验证,比如打印numpy版本 Console.WriteLine(np.__version__); } } finally { // 应用退出时关闭Python引擎(建议执行) PythonEngine.Shutdown(); }验证numpy的安装有效性
确保numpy已正确安装到Python3.8环境,打开命令行执行:C:\Python38\python.exe -c "import numpy; print(numpy.__version__)"若报错,先修复numpy安装:
C:\Python38\Scripts\pip.exe install numpy
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

