如何将Python pip3模块集成至OpenWRT初始固件镜像中
把Python3与pip3模块集成到OpenWRT固件的实现方法
嘿,我之前刚好研究过怎么把Python包直接集成到OpenWRT固件里,这样刷完机不用再手动折腾依赖,太省心了!下面给你详细说下具体步骤,以你提到的Python3和argparse模块为例:
1. 先搭好OpenWRT编译环境
首先得在本地电脑(推荐用Ubuntu/Debian类系统)搭建OpenWRT的编译环境:
- 克隆官方OpenWRT源码到本地目录
- 进入源码目录后,更新并安装feeds:
./scripts/feeds update -a ./scripts/feeds install -a
2. 配置编译选项,加入Python3基础组件
运行make menuconfig进入图形配置界面,找到以下选项并勾选:
Languages -> Python:勾选python3、python3-pip(要装pip模块必须选这个),如果需要其他基础组件也可以一起选上- 按
Save保存配置,退出界面
3. 集成argparse模块两种方法
方法一:把pip包转成OpenWRT专属ipk包(推荐)
这种方法最规范,模块会像官方软件包一样被管理:
- 在编译环境的系统里先安装依赖:
apt install python3-pip python3-setuptools - 安装
pip2ipk工具:pip3 install pip2ipk - 生成argparse的ipk包:
pip2ipk argparse - 把生成的ipk包放到OpenWRT源码的
packages目录下 - 再次运行
make menuconfig,在Local Packages里找到这个argparse的ipk包并勾选 - 这样编译时就会自动把它集成到固件里
方法二:首次启动自动离线安装(快速测试用)
如果只是快速验证,可以用这种方式,不用打包ipk:
- 先在本地下载argparse的离线wheel包:
pip3 download argparse -d ./wheels - 把整个
wheels目录复制到OpenWRT源码的package/base-files/files/root/路径下 - 在
package/base-files/files/etc/uci-defaults/目录下新建一个脚本99-install-python-packages,内容如下:#!/bin/sh # 离线安装argparse模块 pip3 install --no-index --find-links=/root/wheels argparse # 安装完成后清理安装包 rm -rf /root/wheels exit 0 - 给脚本加执行权限:
chmod +x package/base-files/files/etc/uci-defaults/99-install-python-packages
4. 编译固件
完成所有配置后,运行以下命令开始编译:
make -j$(nproc)
编译完成后,在bin/targets/对应的设备目录下就能找到生成的固件,刷入设备后,开机就已经自带Python3和argparse模块了!
小提醒
- 注意:argparse其实是Python3的标准库,如果你在
make menuconfig里选的是完整的python3包,可能已经自带了这个模块,不用额外安装,可以先确认下避免做无用功 - 对于一些带编译依赖的Python模块(比如numpy),需要提前在OpenWRT编译配置里勾选对应的系统库,否则离线安装会失败
内容的提问来源于stack exchange,提问作者cdevman




