cpython交叉编译集成到OpenHarmony中

开源地址:https://gitee.com/OpenHarmony_Python/python_oh

本仓库用于存放cpython3.13.5 集成到OpenHarmony标准系统的相关代码,下面以OpenHarmony5.1.0 rk3568为例集成python,其它设备和其它OpenHarmony版本参考本仓库修改适配即可。

image.png

目前适配进展:将cpython 3.13.5 交叉编译并且集成到固件中,除python中涉及gui的标准库不能使用外,其他标准库均可正常使用,pip可正常使用(仅纯python实现的pip库可正常使用)

# 拉取5.1.0tag分支代码
mkdir OpenHarmony-5.1.0-Release && cd OpenHarmony-5.1.0-Release
repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.1.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

# 下载本仓库到5.1r源码下
git clone -b 5.1.0_cpython_3.13.5 https://gitee.com/OpenHarmony_Python/python_oh.git python_oh

# 打 5.1.0 3568 python适配补丁 
patch -p1 < python_oh/5.1.0_3568_add_python.patch

# 安装编译依赖
sudo apt-get install autoconf automake libtool texinfo xutils-dev cmake tcl8.6

# 安装python3.13
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update -y
sudo apt install python3.13 -y

# 交叉编译cpython
chmod 777 python_oh/build_python_oh.sh
bash python_oh/build_python_oh.sh

# 编译3568固件
./build.sh --product-name rk3568 --ccache

pip使用

# 安装pip
python3 -m ensurepip --upgrade

# pip管理的三方列表
pip3 list

# 安装requests库,使用国内清华源
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

单独编译

# 32位
./build.sh --product-name rk3568 --ccache --build-target=cpython

# 64位
./build.sh --product-name rk3568 --ccache --build-target=cpython --target-cpu arm64

总结与后续完善方向

1.python是解释型语言,这意味着不需要编译直接运行。python集成到OpenHarmony中,可以利用python的特性开发一些简单的应用。

image.png

2.由于OpenHarmony使用的c和c++库不一样,所以暂时不支持c/c++实现的一些pip库

目前python的标准库除gui的标准库外,其他标准库基本可正常使用,纯py实现的pip库也可正常使用。

_tkinter, tkinter, turtle等gui库不可使用。_curses, curses, readline依赖系统库 libncurses 和 libreadline,缺少几个函数没有导出。

# 进行模块导入测试
python3 01_test_importlib.py

------------------------------------------------------------
导入测试完成!
成功导入: 273 个模块
跳过导入: 5 个模块
导入失败: 12 个模块

============================================================
导入失败的模块列表:
------------------------------------------------------------
  1. _curses                        -> Error relocating /system/lib/python3.13/lib-dynload/_curses.cpython-313.so: delwin: symbol not found
  2. _curses_panel                  -> PyCapsule_Import could not import module "_curses"
  3. _ios_support                   -> ObjC runtime library couldn't be loaded
  4. _overlapped                    -> No module named '_overlapped'
  5. _scproxy                       -> No module named '_scproxy'
  6. _tkinter                       -> No module named '_tkinter'
  7. _wmi                           -> No module named '_wmi'
  8. curses                         -> Error relocating /system/lib/python3.13/lib-dynload/_curses.cpython-313.so: delwin: symbol not found
  9. readline                       -> Error relocating /system/lib/python3.13/lib-dynload/readline.cpython-313.so: rl_initialize: symbol not found
 10. tkinter                        -> No module named '_tkinter'
 11. turtle                         -> No module named '_tkinter'
 12. winsound                       -> No module named 'winsound'
------------------------------------------------------------
总计 12 个模块导入失败
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐