You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazor WebApp中通过pythonnet调用Python脚本(解决模块找不到问题)

在Blazor WebApp中使用pythonnet调用本地Python脚本的解决方案

模块找不到的核心原因是Python解释器的sys.path未包含你的脚本所在目录,以下是具体解决步骤:

1. 确保脚本文件配置正确

  • 确认你的Python脚本文件名为PythonCalls.py(与PyModule.Import的模块名完全一致),且文件内的test函数定义正确:
    def test():
        return "Python脚本执行成功"
    
  • 在Visual Studio中右键该脚本文件,打开属性,设置复制到输出目录为「如果较新则复制」或「始终复制」,确保运行时脚本能被同步到程序输出目录。

2. 手动将脚本路径添加到Python的sys.path

Blazor WebApp运行时的工作目录可能不等于你的项目目录,需要主动获取脚本所在的绝对路径并添加到Python的搜索路径中:

修正后的完整代码示例:

using Python.Runtime;
using System.IO;

// 配置Python DLL路径
Runtime.PythonDLL = @"C:\Users\homepc\AppData\Local\Programs\Python\Python312\python312.dll";

// 初始化Python引擎
PythonEngine.Initialize();

try
{
    using (Py.GIL())
    {
        // 获取脚本所在的绝对路径(假设脚本在项目根目录,可根据实际子目录调整)
        string scriptDir = AppContext.BaseDirectory;
        // 如果脚本在子目录(比如PythonScripts文件夹),则修改为:
        // string scriptDir = Path.Combine(AppContext.BaseDirectory, "PythonScripts");

        // 获取Python的sys模块
        dynamic sys = Py.Import("sys");
        // 将脚本目录添加到Python的搜索路径
        sys.path.append(scriptDir);

        // 导入目标Python模块
        PyObject pyScript = PyModule.Import("PythonCalls");
        // 调用test函数并转换结果为字符串
        string result = pyScript.InvokeMethod("test").ToString();
        
        // 后续处理结果(比如绑定到Blazor组件属性)
        // ...
    }
}
finally
{
    // 确保释放Python引擎资源
    PythonEngine.Shutdown();
}

3. 额外注意事项

  • 仅支持Blazor Server:Blazor WASM运行在浏览器沙箱中,无法直接调用本地Python DLL,因此该方案只适用于Blazor Server项目。
  • 环境兼容性:确保你的Python环境已安装pythonnet(执行pip install pythonnet),且Python版本与pythonnet版本兼容(Python 3.12需使用支持该版本的pythonnet版本)。
  • 权限问题:运行Blazor Server的进程需要具备访问Python DLL和脚本文件的权限。

内容的提问来源于stack exchange,提问作者physics90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:32:42