如何生成适配Android arm64-v8a或跨平台的Python .whl文件?
为Android arm64-v8a编译Python Wheel(以Numpy为例)
先说明:为啥你生成不了-any后缀的wheel
Numpy不是纯Python库,里面有大量C/C++编写的扩展代码,这类库根本没法生成-any跨平台wheel——这种后缀只属于纯Python库,没有编译后的二进制代码。你在Linux/Windows编译出对应平台的wheel是完全正常的,因为编译过程会绑定当前系统的架构和依赖。
方法1:直接在Android设备上用Termux编译(最省心)
- 装个Termux应用,打开后依次运行这些命令:
# 更新包列表并升级 pkg update && pkg upgrade -y # 安装编译依赖和Python环境 pkg install python python-dev clang make libopenblas-dev -y # 安装wheel工具 pip install wheel # 从源码编译并生成Numpy的wheel文件 pip wheel numpy --no-binary :all: - 执行完成后,当前目录会生成适配Android arm64-v8a架构的Numpy wheel文件。
方法2:在Linux主机上交叉编译(适合批量处理多个库)
- 安装Android NDK(推荐r25及以上版本),配置环境变量:
export ANDROID_NDK=/你的NDK存放路径/android-ndk export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH - 创建交叉编译配置文件(命名为
android-arm64.cfg),内容如下:[build_ext] compiler=clang compiler_flags=-target aarch64-linux-android24 -fPIC linker_flags=-target aarch64-linux-android24 - 下载Numpy源码包并解压,进入源码目录后执行编译命令:
python setup.py bdist_wheel --config-file android-arm64.cfg - 注意:Numpy依赖BLAS/LAPACK库,若编译报错,需先交叉编译openblas库,再在编译Numpy时指定其路径,流程相对繁琐,优先推荐Termux方法。
方法3:用cibuildwheel自动化编译(适合批量多版本编译)
- 安装cibuildwheel工具:
pip install cibuildwheel - 在项目根目录创建
pyproject.toml文件,添加Android arm64的编译配置:[tool.cibuildwheel] build = "cp3*-manylinux_aarch64" environment = { "ANDROID_NDK" = "/你的NDK存放路径/android-ndk", "CIBW_ANDROID_API_LEVEL" = "24" } - 执行编译命令:
cibuildwheel --platform android . - 该工具会自动处理依赖安装、编译流程,适合需要编译多个库或多个Python版本的场景。
内容的提问来源于stack exchange,提问作者yolopoi
相关产品推荐
相关产品推荐

