有时候安装的第三方库依赖一些外部二进制文件,比如C类库需要gcc来编译、moviepy库需要ffmpeg来支撑,而这些在qpython是安装不了的,万幸的是termux都支持,下面以ffmpeg为例,演示qpython提取termux命令的过程。
预备工作: 先在qpython目录创建bin目录和lib目录,装载需要移植的命令和类库。
mkdir /sdcard/qpython/bin/
mkdir /sdcard/qpython/lib/
正式开始:
-
termux安装ffmpeg
pkg install ffmpeg
-
查询ffmpeg命令路径
which ffmpeg
-
检查ffmpeg命令是否为映射命令
which ffmpeg|xargs ls -ll
-rwx------ 1 u0_a243 u0_a243 246224 Jun 14 23:05 /data/data/.../ffmpeg
以上为非映射命令,直接复制即可
cp /data/data/.../ffmpeg
/sdcard/qpython/bin/
如果是以下带->的情况,则需要复制指向的那个命令,移植到qpython后还要手动建立映射
-rwx------ 1 u0_a243 u0_a243 246224 Jun 14 23:05 ffmpeg -> /data/data/.../ffmpeg
cp /data/data/.../ffmpeg
/sdcard/qpython/bin/
-
移植ffmpeg的.so依赖库
pkg install binutils
which ffmpeg|xargs ldd
libavdevice.so libavfilter.so libavformat.so libavcodec.so libpostproc.so libswresample.so libswscale.so libavutil.so libm.so libc.so
相关so依赖库在
/data/data/com.termux/files/usr/lib
目录里面,需要复制到qpython的lib目录
/data/data/org.qpython.qpy/files/lib
,# termux cd ~/../usr/lib/ ls -ll libavdevice.so cp libavdevice.so /sdcard/qpython/lib/ ...
# qpython cd $PYTHONHOME/lib/ cp /sdcard/qpython/lib/libavdevice.so ./ ...
需要注意的是相关so依赖库并不止以上这些,
最终还是要在qpython运行ffmpeg时报错缺少依赖,缺啥补啥,ffmpeg有33个依赖,
如果是带->的情况,则需要复制指向的那个so库,移植到qpython后还要手动建立映射。
-
移植ffmpeg命令
# qpython cd $PYTHONHOME/bin/ cp /sdcard/qpython/bin/ffmpeg ./ chmod 755 ffmpeg # 尝试执行ffmpeg命令,并补充报错缺少的依赖,直至成功 ffmpeg
移植完成,Enjoy~