开发者

将Python代码打包成可调用SDK的四种方法小结(适用于移动端 App)

目录
  • 引言
  • 1. 选择打包方式
  • 2. 方法一:使用 Cython 生成动态链接库(适用于 android/IOS)
    • 2.1. 原理
    • 2.2. 步骤
  • 3. 方法二:使用 HTTP API(适用于 Android/iOS)
    • 3.1. 原理
    • 3.2. 步骤
  • 4. 方法三:使用 Chaquopy(适用于 Android)
    • 4.1. 原理
    • 4.2. 步骤
  • 5. 方法四:使用 BeeWare(适用于 iOS)
    • 5.1. 原理
    • 5.2. 步骤
  • 6. 总结

    引言

    python 是一门功能强大、生态丰富的语言,广泛用于数据处理、机器学习和后端服务。然而,Python 并不是原生的移动端开发语言(Android 主要使用 Java/Kotlin,iOS 主要使用 Swift/Objective-C)。如果希望在移动端 App(Android 或 iOS)中调用 Python 代码,最好的方式是 将 Python 代码打包成 SDK,然后通过 FFI(外部函数接口ngFSx)或本地服务 让 App 访问它。

    本文将介绍几种 Python 代码打包成可调用 SDK 的方法,包括 PyInstaller、Cython、PyOxidizer、Kivy + Buildozer、Chaquopy、BeeWare 等,并提供详细的步骤。

    1. 选择打包方式

    不同的打包方式适用于不同的应用场景:

    方法适用场景适用平台主要优点主要缺点
    PyInstaller桌面应用Windows, MACOS, linux快速生成可执行文件生成的文件较大,不适合移动端
    Cython计算密集型模块Windows, macOS, Linux, Android, iOS可加速 Python 代码需要额外的 C 语言开发
    PyOxidizer跨平台应用Windows, macOS, Linux生成独立可执行文件配置较复杂
    Kivy + Buildozer移动 AppAndroid, iOS直接开发移动 AppUI 组件较少
    Chaquopy在 Android 运行 Python 代码Android适配原生 UI仅支持 Android
    BeeWare在 iOS 运行 Python 代码iOS, Android适配原生 UI生态不成熟

    如果你的目标是 将 Python 代码打包成 SDK,供 Android/iOS App 调用,推荐以下方法:

    1. Cython + JNI(Android)
    2. Python 后端 + HTTP API(通用方案)
    3. Chaquopy(仅 Android)
    4. BeeWare(仅 iOS)

    2. 方法一:使用 Cython 生成动态链接库(适用于 Android/iOS)

    2.1. 原理

    Cython 可以将 Python 代码编译成 C 代码,并生成动态链接库(.so 或 .dll),然后可以在 Android 或 iOS 通过 JNI(Java Native Interface)或 FFI(Foreign Function Interface)调用。

    2.2. 步骤

    (1)安装 Cython

    pip install cython
    

    (2)编写 Python 代码

    假设我们有一个简单的 Python 计算模块 math_utils.py

    def add(a: int, b: int) -> int:
        return a + b
    

    (3)创建 math_utils.pyx

    将代码改成 Cython 代码(.pyx 文件):

    # math_utils.pyx
    def add(int a, int b):
        return a + b
    

    (4)编写 setup.py

    from setuptools import setup
    from C编程ython.Build import cythonize
    
    setup(
        ext_modules=cythonize("math_utils.pyx", language_level="3"),
    )
    

    (5)编译成 .so(Linux/Android) 或 .dylib(macOS/iOS)

    python setup.py build_ext --inplace
    

    这会生成 math_utils.cpython-38-x86_64-linux-gnu.so(Linux) 或 .dylib(macOS)。

    (6)在 Java/Kotlin 调用(Android)

    在 Android 项目中加载 .so 文件:

    System.loadLibrary("math_utils");
    
    public class MathUtils {
        public native int add(int a, int b);
    }
    

    3. 方法二:使用 HTTP API(适用于 Android/iOS)

    3.1. 原理

    • 将 Python 代码部署到服务器
    • 让移动端 App 通过 HTTP API 访问 Python 服务

    3.2. 步骤

    (1)安装 FastAPI

    pip install fastapi uvicorn
    

    (2)编写 FastAPI 代码

    fromphp fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/add")
    def add(a: int, b: int):
        return {"result": a + b}
    
    if __name__ == "__main__":
        import uvicorn
        uvicorn.run(app, host="0.0.0.0", port=8000)
    

    (3)运行 API 服务器

    uvicorn main:app --host 0.0.0.0 --port 8000
    

    (4)在移动端 App 调用

    在 Android/iOS 代码中请求 API:

    URL url = new URL("http://server_ip:8000/add?a=3&b=4");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    

    4. 方法三:使用 Chaquopy(适用于 Android)

    4.1. 原理

    Chaquopy 允许在 Android 项目中直接运行 Python 代码,并与 Java 交互。

    4.2. 步骤

    (1)在 Android 项目 build.gradle 中添加依赖

    dependencies {
        implementation 'com.chaquo.python:gradle:12.0'
    }
    

    (2)在 PythonActivity.java 运行 Python 代码

    import com.chaquo.python.Python;
    import com.chaquo.python.android.AndroidPlatform;
    
    if (!Python.isStarted()) {
        Python.start(new AndroidPlatform(this));
    }
    
    Python py = Python.getInstance();
    PyObject obj = py.getMwww.devze.comodule("script").callAttr("add", 3, 5);
    System.out.println(obj.toString());
    

    5. 方法四:使用 BeeWare(适用于 iOS)

    5.1. 原理

    BeeWare 允许在 iOS 上运行 Python 代码,使用 Rubicon-ObjC 进行 iOS 交互。

    5.2. 步骤

    安装 BeeWare:

    pip ihttp://www.devze.comnstall briefcase

    创建 iOS 项目:

    briefcase create iOS
    

    运行 iOS 模拟器:

    briefcase run iOS
    

    6. 总结

    方案适用平台主要优点主要缺点
    Cython + JNIAndroid, iOS高性能,可本地调用需编译 .so/.dylib,较复杂
    HTTP API通用易于扩展需要网络连接
    ChaquopyAndroid直接在 Android 运行 Python仅支持 Android
    BeeWareiOS直接在 iOS 运行 Python生态不成熟

    如果希望 Python 高效运行在 App 内部,建议使用 Cython + JNI;如果希望 快速集成,建议 用 FastAPI 作为后端。不同应用场景可以选择不同方案,希望本文能帮助你成功将 Python 代码打包成 SDK!

    以上就是将Python代码打包成可调用SDK的几种方法小结(适用于移动端 App)的详细内容,更多关于Python代码打包成SDK的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜