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
相关产品推荐
相关产品推荐

