Python离线部署 ¶
前提:服务已经在可以linux上正常运行
方式一:docker ¶
注意:因为代码里面包含模型文件等,非常的大,因此这里docker构建仅仅构建了代码运行所需要的python环境和依赖包;然后通过docker的数据卷方式将代码挂载到容器内。
可以根据需要稍微更改下dockerfile,将代码也打包到容器中
项目根目录运行
bash1pip freeze > requirements.txt # 导出当前项目所有依赖文件下载离线包(可选),注意如果使用离线pip依赖包构建,需要保证当前linux系统和构建的基础镜像一致
bash1# 根据`requirements.txt`下载离线依赖包到项目根目录package文件夹下 2pip download -r requirements.txt -d ./packages更改Dockerfile,注释掉 在线安装所有依赖,取消注释 离线安装所有依赖
dockerfile1# 离线安装所有依赖 2RUN pip3 install --no-index --find-links=/app/packages -r requirements.txt 3 4# 在线安装所有依赖 5# RUN pip3 install -i https://mirrors.ustc.edu.cn/pypi/simple -r requirements.txt构建
bash1# 运行命令构建镜像 2# --progress=plain 是打印详细信息 3docker build --progress=plain -t yh-facenet:1.0 .使用docker命令启动测试
bash1# 启动 2# 注意:必须挂在数据卷,且数据卷中放 python 代码 3# -p 宿主机端口:容器暴露端口 4# -v 宿主机卷:容器卷 5docker run -p 8000:8000 -v /data/soft/minepy/yh-facenet:/app yh-facenet:1.0导出镜像,导入镜像
bash1# 导出docker镜像 2docker save -o yh-facenet.tar yh-facenet:1.0 3 4# 导入docker镜像 5docker load -i yh-facenet.tar 6 7# 启动镜像 8docker run --name -d -p 主机:容器 -v 主机:容器 --restart=always yh-facenet:1.0
Dockerfile
dockerfile
1# 构建阶段
2FROM python:3.10.17-bookworm AS builder
3
4# 更换源
5RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
6
7# 更新包列表并安装构建依赖
8RUN apt-get update \
9 && apt-get install -y --no-install-recommends gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev \
10 && rm -rf /var/lib/apt/lists/*
11
12# 设置工作目录
13WORKDIR /app
14
15# 复制requirements
16COPY requirements.txt .
17
18# 复制离线依赖包
19COPY packages ./packages
20
21# 升级 pip
22RUN pip install -i https://mirrors.ustc.edu.cn/pypi/simple --upgrade pip
23
24# 离线安装所有依赖
25RUN pip3 install --no-index --find-links=/app/packages -r requirements.txt
26
27# 在线安装所有依赖
28# RUN pip3 install -i https://mirrors.ustc.edu.cn/pypi/simple -r requirements.txt
29
30# 运行阶段
31FROM python:3.10.17-slim-bookworm
32
33LABEL maintainer="tanglei <tanglei@qq.com>"
34
35# 更换源
36RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
37
38# 安装运行时依赖
39RUN apt-get update \
40 && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 \
41 && rm -rf /var/lib/apt/lists/*
42
43# 设置工作目录
44WORKDIR /app
45
46# 从构建阶段复制依赖和应用代码
47COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages
48
49# 指定启动命令
50CMD ["python", "main.py"]
51
52# 暴露端口
53EXPOSE 8000方式二:虚拟环境 ¶
项目根目录运行
bash1pip freeze > requirements.txt # 导出当前项目所有依赖文件根据
requirements.txt下载离线依赖包到项目根目录package文件夹下bash1pip download -r requirements.txt -d ./packages使用压缩包打包项目文件
bash1tar -zcvf yh-facenet.tar.gz yh-facenet/将
yh-facenet.tar.gz文件传到服务器上解压
bash1tar -zxvf yh-facenet.tar.gz创建虚拟环境,并安装依赖
bash1# 创建虚拟环境,conda或venv都行 2python -m venv .venv 3 4# 根据requirements.txt离线安装依赖 5pip install --no-index --find-links=./packages -r requirements.txt
注意:
- 打包 linux 系统和服务器linux系统尽量保持一致
- python需要保持一致