QPython提取Termux命令教程

cooolr 于 2022-10-08 发布

有时候安装的第三方库依赖一些外部二进制文件,比如C类库需要gcc来编译、moviepy库需要ffmpeg来支撑,而这些在qpython是安装不了的,万幸的是termux都支持,下面以ffmpeg为例,演示qpython提取termux命令的过程。

预备工作: 先在qpython目录创建bin目录和lib目录,装载需要移植的命令和类库。

mkdir /sdcard/qpython/bin/

mkdir /sdcard/qpython/lib/

正式开始:

  1. termux安装ffmpeg

    pkg install ffmpeg

  2. 查询ffmpeg命令路径

    which ffmpeg

  3. 检查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/

  4. 移植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后还要手动建立映射。

  5. 移植ffmpeg命令

     # qpython
     cd $PYTHONHOME/bin/
     cp /sdcard/qpython/bin/ffmpeg ./
     chmod 755 ffmpeg
     # 尝试执行ffmpeg命令,并补充报错缺少的依赖,直至成功
     ffmpeg
    

    移植完成,Enjoy~