当前位置: 代码网 > it编程>前端脚本>Python > 将Python代码打包成可调用SDK的四种方法小结(适用于移动端 App)

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

2025年04月03日 Python 我要评论
引言python 是一门功能强大、生态丰富的语言,广泛用于数据处理、机器学习和后端服务。然而,python 并不是原生的移动端开发语言(android 主要使用 java/kotlin,ios 主要使

引言

python 是一门功能强大、生态丰富的语言,广泛用于数据处理、机器学习和后端服务。然而,python 并不是原生的移动端开发语言(android 主要使用 java/kotlin,ios 主要使用 swift/objective-c)。如果希望在移动端 app(android 或 ios)中调用 python 代码,最好的方式是 将 python 代码打包成 sdk,然后通过 ffi(外部函数接口)或本地服务 让 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 cython.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 代码

from 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.getmodule("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 install 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的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com