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

 更新时间:2025年04月03日 10:06:36   作者:萧鼎  
Python是一门功能强大、生态丰富的语言,广泛用于数据处理、机器学习和后端服务,然而,Python并不是原生的移动端开发语言,如果希望在移动端App中调用Python代码,最好的方式是将Python代码打包成SDK,所以本文给大家介绍了几种Python代码打包成可调用SDK的方法

引言

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的资料请关注脚本之家其它相关文章!

相关文章

  • python 利用panda 实现列联表(交叉表)

    python 利用panda 实现列联表(交叉表)

    这篇文章主要介绍了python 利用panda 实现列联表(交叉表),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Jupyter Notebook的使用详解

    Jupyter Notebook的使用详解

    JupyterNotebook是一个强大的工具,可以用于数据科学和机器学习等领域的各种任务,该文章介绍了JupyterNotebook的基本使用方法,包括新建和保存Notebook,插入图像,运行代码,以及许多快捷键的使用
    2025-01-01
  • jupyter中torch库的安装与虚拟环境的搭建方式

    jupyter中torch库的安装与虚拟环境的搭建方式

    本文详细介绍了如何在Windows系统上创建和配置PyTorch环境,包括安装Anaconda、创建虚拟环境、配置镜像源、安装CUDA、查找和安装PyTorch版本、安装ipykernel以及在Jupyter Notebook中切换环境
    2025-02-02
  • pandas DataFrame map方法的实现

    pandas DataFrame map方法的实现

    pandas.DataFrame.map()方法用于对 DataFrame 的每个元素应用一个函数,返回一个新的 DataFrame,其形状与原 DataFrame 相同,下面就来介绍一下,感兴趣的可以了解一下
    2025-05-05
  • 互斥锁解决 Python 中多线程共享全局变量的问题(推荐)

    互斥锁解决 Python 中多线程共享全局变量的问题(推荐)

    这篇文章主要介绍了互斥锁解决 Python 中多线程共享全局变量的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • python的变量和简单数字类型详解

    python的变量和简单数字类型详解

    这篇文章给大家详细介绍了python的变量和简单数字类型,文中介绍的很详细,相信对大家的理解和学习很有帮助,有需要的朋友们可以参考借鉴
    2021-09-09
  • python数据类型判断type与isinstance的区别实例解析

    python数据类型判断type与isinstance的区别实例解析

    这篇文章主要介绍了python数据类型判断type与isinstance的区别实例解析,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • python中逻辑与或(and、or)和按位与或异或(&、|、^)区别

    python中逻辑与或(and、or)和按位与或异或(&、|、^)区别

    这篇文章主要介绍了python中逻辑与或(and、or)和按位与或异或(&、|、^)区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 一文讲解如何查看python脚本所依赖三方包及其版本

    一文讲解如何查看python脚本所依赖三方包及其版本

    Python因为具有超多的第三方库而被大家喜欢,下面这篇文章主要给大家介绍了关于如何查看python脚本所依赖三方包及其版本的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • python遍历文件夹的各种方法大全

    python遍历文件夹的各种方法大全

    在Python中,可以使用多种方法来多次遍历文件,下面这篇文章主要给大家介绍了关于python遍历文件夹的各种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03

最新评论