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

Flutter用Chaquopy调用自定义Python函数提示未定义的问题咨询

解决Chaquopy调用自定义Python函数的问题

一、调用当前script.py中函数的正确方式

你遇到的name 'hello' is not defined错误,本质是Chaquopy.executeCode执行的代码处于独立全局命名空间,默认不会自动加载你的script.py模块。解决方法有两种:

1. 显式导入模块后调用函数

直接在执行代码里导入script模块,通过模块名调用函数:

// Flutter Dart代码
Chaquopy.executeCode('import script; print(script.hello())');

对应的script.py示例:

def hello():
    return "Hello from custom function!"

2. 先加载script.py内容再调用

如果不想每次写导入语句,可先读取script.py内容并执行,让函数进入当前命名空间后再调用:

// 先读取assets中的script.py文件(需在pubspec.yaml声明assets)
String scriptContent = await rootBundle.loadString('assets/script.py');
// 执行脚本内容
await Chaquopy.executeCode(scriptContent);
// 直接调用函数
await Chaquopy.executeCode('print(hello())');

这种方式适合多次调用该模块函数的场景,但如果script.py有复杂依赖,优先选第一种方法。

二、调用同目录其他文件的自定义函数

假设同目录下有utils.py文件,内容如下:

def add(a, b):
    return a + b

1. 在script.py中导入封装

在script.py中导入utils模块,封装成调用接口:

import utils

def calculate_sum():
    return utils.add(5, 3)

然后在Flutter中通过script模块调用:

Chaquopy.executeCode('import script; print(script.calculate_sum())');

2. 直接在executeCode中导入调用

也可跳过script.py,直接在执行代码里导入目标模块:

Chaquopy.executeCode('import utils; print(utils.add(2, 4))');

注意事项

  • 确保所有Python文件放在Chaquopy可识别的源码目录,比如Android项目的src/main/python,或Flutter的assets/python目录(需在Android端build.gradle配置路径):
// Android/app/build.gradle
chaquopy {
    python {
        srcDirs = ["../assets/python"] // 根据实际路径调整
    }
}
  • 若Python文件在Flutter assets中,需在pubspec.yaml声明:
flutter:
  assets:
    - assets/python/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:37:53