由于国内环境的问题,在python中的一些高级库国内镜像是不全的,下载比较容易出问题,故需要找第三方库去解决。
准备
- 媒体管道 ·皮皮 (pypi.org)
- python环境镜像。
https://hub.docker.com/_/python
安装步骤
-
从皮皮中搜索对应版本的 mediapipe ,我这里演示,使用的是 mediapipe 0.10.0
-
拉到底部下载对应系统版本的 whl 文件,我这里使用的是红框标记的版本。
-
分析下载的文件名称 mediapipe-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
这个文件的命名遵循 PEP 425 规范,包含很多信息:
- mediapipe-0.10.0:表示这个文件是 mediapipe 版本 0.10.0 的 wheel 文件
- cp39:表示适用于 CPython 3.9
- cp39:重复一遍,也表示 CPython 3.9
- manylinux_2_17_x86_64:表示这个 wheel 文件在 CentOS 7 (manylinux2014) 平台的 x86_64 架构下构建
- manylinux2014_x86_64:同上,重复一遍
- .whl:表示这是一个 Python Wheel 文件
所以总结起来,我们知道这个 Wheel 文件需要 Python 3.9 版本,在 Linux x86_64 架构的系统上使用。
-
去镜像网站选取合适镜像
经过实验和查询资料发现Alpine Linux - mediapipe wheel文件不支持 Alpine 系列(slim也不支持,因为也是基于alpine)。
这里选择python:3.9-buster
镜像 -
制作镜像,dockerfile中的脚本需要自行编写,这里是将 mediapipe 服务以 websocket 的方式提供给的外部使用。
FROM python:3.9-buster
COPY mediapipe-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl .
RUN pip install mediapipe-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# 安装依赖
RUN apt-get update && apt-get install -y \
libgl1-mesa-dev \
libsm6 \
libxext6 \
libxrender-dev
# 安装 OpenCV
RUN pip uninstall opencv-python && pip install opencv-python
# 安装服务
RUN pip install websockets
# 复制脚本
COPY poseServer.py .
# 运行脚本
CMD ["python", "poseServer.py"]
总结
总体来说采用这种方式安装可以避免很多依赖的问题,也不需要魔法就可以构建最合适自己的镜像。
参考
https://blog.csdn.net/weixin_44353800/article/details/129027739
https://hub.docker.com/