在Flutter中使用Starflut导入Python模块

16

我正在尝试开发一个用于音频指纹处理的Flutter应用程序。我正在使用Starflut来进行Python集成。这里是一个简单的示例:

//python file for using from dart

def tt(a,b) :
    print (a, b)
    return 666,777
g1 = 123
def yy(a,b,z) :
    print(a,b,z)
    return {'jack': 4098, 'sape': 4139}

class Multiply :

    def __init__(self):
        pass

    def multiply(self, a,b):
        print("multiply....",a,b)
        return a * b

//dart code which uses python

void _initStarCore() async {
    StarCoreFactory starcore = await Starflut.getFactory();
    StarServiceClass service = await starcore.initSimple("test", "123", 0, 0, []);
    srvGroup = await service["_ServiceGroup"];
    bool isAndroid = await Starflut.isAndroid();
    if (isAndroid == true) {
        String libraryDir = await Starflut.getNativeLibraryDir();
        String docPath = await Starflut.getDocumentPath();
        if (libraryDir.indexOf("arm64") > 0) {
            Starflut.unzipFromAssets("lib-dynload-arm64.zip", docPath, true);
        } else if (libraryDir.indexOf("x86_64") > 0) {
            Starflut.unzipFromAssets("lib-dynload-x86_64.zip", docPath, true);
        } else if (libraryDir.indexOf("arm") > 0) {
            Starflut.unzipFromAssets("lib-dynload-armeabi.zip", docPath, true);
        } else {
            Starflut.unzipFromAssets("lib-dynload-x86.zip", docPath, true);
        }
        await Starflut.copyFileFromAssets("python3.6.zip",
            "flutter_assets/starfiles", null);
    }
    await srvGroup.initRaw("python36", service);

    String resPath = await Starflut.getResourcePath();
    srvGroup.loadRawModule("python", "",
        resPath + "/flutter_assets/starfiles/" + "testpy.py", false);

    dynamic python = await service.importRawContext("python", "", false, "");

    StarObjectClass retobj = await python.call("tt", ["hello ", "world"]);
    print(await retobj[0]);
    print(await retobj[1]);

    print(await python["g1"]);

    StarObjectClass yy = await python.call("yy", ["hello ", "world", 123]);
    print(await yy.call("__len__",[]));

    StarObjectClass multiply = await service.importRawContext("python", "Multiply", true, "");
    StarObjectClass multiply_inst = await multiply.newObject(["", "", 33, 44]);
    print(await multiply_inst.getString());

    print(await multiply_inst.call("multiply", [11, 22]));

    await srvGroup.clearService();
    await starcore.moduleExit();
}

现在我需要导入Python库Dejavu进行音频指纹识别,但我不知道该如何做。Starflut文档或其存储库中的问题中都没有任何关于此的信息。

有人遇到过同样的问题吗?或者也许有人有任何建议可以尝试解决它吗?

对于错误,抱歉,希望文本是可理解的:) 英语不是我的母语。


1
我尝试将一个现有模块添加到python3.6.zip中,然后重新压缩为zip文件,但遇到错误:“Py_Initialize:无法加载文件系统编解码器”。(OSX) - onesiumus
2个回答

6

您是否阅读了代码库的readme安装 readme文件?

如果没有,请尝试以下操作:

在您的命令提示符中:

pip install PyDejavu

在需要导入Dejavu模块的地方:
from dejavu import Dejavu  

谢谢您的回答。我应该在哪里执行这些命令?如果我将 pip install PyDejavu 放在我的 .py 文件中 from dejavu import Dejavu 上面,我会得到一个错误。对不起,如果问题很愚蠢,因为我是 Python 的新手。 - Danya Yatsenko
1
你需要在命令提示符中输入第一个命令(请在Google上搜索“pip install command prompt”),并在每个模块中使用Dejavue输入第二个命令。 - Tms91
如果你是Python新手,在开始使用默认Django包中未包含的模块之前,应该先练习一下基本概念。否则会很困难... - Tms91

1

您尝试过chaquopy插件吗?它支持90%的Python包,可以在Flutter应用程序中使用和集成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接