跳到主要内容

如何扩展代码块依赖库

依赖库持久化

以下操作需要在服务运行中状态下进行,仅需首次完成一次即可,后续安装扩展库时无需操作

  1. 创建依赖库挂载目录(实际目录可自定义),如:

    mkdir -p /data/hap/script/volume/command/package/python-3.6/
    mkdir -p /data/hap/script/volume/command/package/nodejs-10.18.0/
  2. 获取预置依赖库

    docker cp $(docker ps | grep command | awk '{print $1}'):/usr/local/lib/python3.6/site-packages/ /data/hap/script/volume/command/package/python-3.6/
    docker cp $(docker ps | grep command | awk '{print $1}'):/usr/local/node-10.18.0/lib/node_modules/ /data/hap/script/volume/command/package/nodejs-10.18.0/
  3. 修改 docker-compose.yaml,将宿主机的依赖库目录挂载到容器内

    services:
    command:
    volumes:
    - ./volume/command/package/python-3.6/site-packages/:/usr/local/lib/python3.6/site-packages/
    - ./volume/command/package/nodejs-10.18.0/node_modules/:/usr/local/node-10.18.0/lib/node_modules/
  4. 管理器根目录下执行以下命令,重启服务

    bash ./service.sh restartall

在线安装扩展库

提醒
  • 必须先完成“依赖库持久化”步骤,将容器内的依赖库目录持久化挂载到宿主机上,否则容器重启后扩展库需要重新安装
  • 在线安装扩展库需确保服务器可以访问互联网

Python

以安装 python-dateutil 扩展库为例:

  1. 进入 command 容器

    docker exec -it $(docker ps | grep command | awk '{print $1}') bash 
  2. 在 command 容器中安装 python-dateutil 扩展库

    pip3 install --target=/usr/local/lib/python3.6/site-packages/ python-dateutil

安装完成后可在宿主机默认路径 /data/hap/script/volume/command/package/python-3.6/site-packages/ 下查看新安装的扩展库。

JavaScript (基于 Nodejs)

以安装 dayjs 扩展库为例:

  1. 进入 command 容器

    docker exec -it $(docker ps | grep command | awk '{print $1}') bash 
  2. 在 command 容器中安装 dayjs 扩展库

    /usr/local/node-10.18.0/bin/npm -g install dayjs

安装完成后可在宿主机默认路径 /data/hap/script/volume/command/package/nodejs-10.18.0/node_modules/ 下查看新安装的扩展库。

离线安装扩展库

提醒
  • 必须先完成“依赖库持久化”步骤,将容器内的依赖库目录持久化挂载到宿主机上,否则容器重启后扩展库需要重新安装
  • 在服务器无法访问互联网 或 提供的扩展库是离线包文件时可以参考离线安装扩展库的方法

Python

以安装 pycryptodome 扩展库为例:

  1. 在可访问互联网的环境下,获取扩展库的离线文件

    pip3 download pycryptodome -d "/package"
    • 在 /package 目录下会生成 pycryptodome 依赖库的离线文件
  2. 将离线库文件上传到 HAP 服务所在的服务器

  3. 将离线库文件拷贝到容器内并安装

    1. 将 pycryptodome 依赖库的离线文件拷贝到 command 容器内 /tmp 路径下

      docker cp pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl $(docker ps | grep command | awk '{print $1}'):/tmp
    2. 进入 command 容器

      docker exec -it $(docker ps | grep command | awk '{print $1}') bash 
    3. 在 command 容器中安装 pycryptodome 扩展库离线包

      pip3 install --target=/usr/local/lib/python3.6/site-packages/ /tmp/pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl

JavaScript (基于 Nodejs)

以安装 dayjs 扩展库为例:

  1. 在可访问互联网的环境下,获取扩展库的离线文件

    npm install dayjs -save
    • 在当前目录下会生成 node_modules/dayjs 依赖库的目录
  2. 打包 dayjs 扩展库目录

    cd node_modules
    tar czf dayjs.tar.gz dayjs
  3. 将扩展库的打包文件 dayjs.tar.gz 上传到 HAP 服务所在的服务器

  4. 将离线库文件解压到容器依赖库已持久化的路径下

    tar xf dayjs.tar.gz -C /data/hap/script/volume/command/package/nodejs-10.18.0/node_modules
    • 如有修改过 HAP 默认数据路径,解压路径则以实际环境路径为准