Python离线部署 Python

2025-04-25 约 1003 字 阅读时长3 分钟

Python离线部署

前提:服务已经在可以linux上正常运行

方式一:docker

注意:因为代码里面包含模型文件等,非常的大,因此这里docker构建仅仅构建了代码运行所需要的python环境和依赖包;然后通过docker的数据卷方式将代码挂载到容器内。

可以根据需要稍微更改下dockerfile,将代码也打包到容器中

  1. 项目根目录运行

    bash
    1pip freeze > requirements.txt   # 导出当前项目所有依赖文件
  2. 下载离线包(可选),注意如果使用离线pip依赖包构建,需要保证当前linux系统和构建的基础镜像一致

    bash
    1# 根据`requirements.txt`下载离线依赖包到项目根目录package文件夹下
    2pip download -r requirements.txt -d ./packages

    更改Dockerfile,注释掉 在线安装所有依赖,取消注释 离线安装所有依赖

    dockerfile
    1# 离线安装所有依赖
    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
  3. 构建

    bash
    1# 运行命令构建镜像
    2# --progress=plain 是打印详细信息
    3docker build --progress=plain -t yh-facenet:1.0 .
  4. 使用docker命令启动测试

    bash
    1# 启动
    2# 注意:必须挂在数据卷,且数据卷中放 python 代码
    3# -p 宿主机端口:容器暴露端口
    4# -v 宿主机卷:容器卷
    5docker run -p 8000:8000 -v /data/soft/minepy/yh-facenet:/app yh-facenet:1.0
  5. 导出镜像,导入镜像

    bash
    1# 导出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

方式二:虚拟环境

  1. 项目根目录运行

    bash
    1pip freeze > requirements.txt   # 导出当前项目所有依赖文件
  2. 根据requirements.txt下载离线依赖包到项目根目录package文件夹下

    bash
    1pip download -r requirements.txt -d ./packages
  3. 使用压缩包打包项目文件

    bash
    1tar -zcvf yh-facenet.tar.gz yh-facenet/
  4. yh-facenet.tar.gz文件传到服务器上

  5. 解压

    bash
    1tar -zxvf yh-facenet.tar.gz
  6. 创建虚拟环境,并安装依赖

    bash
    1# 创建虚拟环境,conda或venv都行
    2python -m venv .venv
    3
    4# 根据requirements.txt离线安装依赖
    5pip install --no-index --find-links=./packages -r requirements.txt

注意:

  1. 打包 linux 系统和服务器linux系统尽量保持一致
  2. python需要保持一致
使用滚轮缩放
按住拖动