一、服务器封装代码的基础操作
大家可以看一下前面写的这篇博客,不涉及到特殊的包(例如GDAL),基本是可以正常封装的
二、有关于GDAL的处理
网上很多有关于GDAL的.whl
文件网址都失效了,在公众号:遥感与深度学习 中发现了可以用的 .whl 文件(亲测有效!)
- 通过百度网盘分享的文件:
GDAL_Linux
百度网盘链接
提取码:1234 - 通过百度网盘分享的文件:
GDAL_Mac
百度网盘链接
提取码:1234 - 通过百度网盘分享的文件:
GDAL_Win
百度网盘链接
提取码:1234
下载完 GDAL 后,后续步骤如下,举个例子(文件夹结构如下):
python
my_project/
├── Dockerfile
├── requirements.txt
├── my_package.whl # 预先下载的 .whl 文件
└── app.py # Python 应用程序
在进入 my_project 目录下,进入虚拟环境后,运行:
python
pip install my_package.whl
大家也可以参考一下其他处理报错的博客:
https://blog.csdn.net/qq_38308388/article/details/128304266
https://blog.csdn.net/weixin_45866058/article/details/139298787
三、新版dockerfile(先后运行a.py和b.py文件该怎么实现,文件夹中有.whl文件的情况该怎么实现)
1. 文件夹中有.whl文件的情况该怎么实现
这里先举一个小例子,文件夹结构如下:
python
my_project/
├── Dockerfile
├── requirements.txt
├── my_package.whl # 预先下载的 .whl 文件
└── app.py # Python 应用程序
dockerfile实现(仅作为一个小例子):
python
# 使用 Python 3.8 作为基础镜像
FROM python:3.8
# 设置工作目录
WORKDIR /app
# 将本地文件复制到容器中
COPY . /app
# 安装依赖(假设 requirements.txt 中没有列出 my_package,因为我们要直接使用 .whl 文件)
RUN pip install -r requirements.txt
# 使用 .whl 文件安装包
RUN pip install ./my_package.whl
# 运行应用程序
CMD ["python", "app.py"]
- COPY . /app:将本地文件夹(包括 my_package.whl)复制到 Docker 容器的 /app 目录。
- pip install
./
my_package.whl:在 Docker 容器中运行 pip install 命令来安装这个 .whl 文件中的包。这里的路径 ./my_package.whl 指的是 /app/my_package.whl
,因为我们之前将文件复制到了 /app 目录。 - CMD ["python", "app.py"]:指定容器启动时要运行的命令,这里运行的是 app.py 脚本。
2. 最终要实现的文件夹结构:
python
my_project/
├── Dockerfile
├── requirements.txt # 项目的 Python 依赖文件
├── inference.py # 第一个 Python 脚本
├── save_location.py # 第二个 Python 脚本
├── torch-1.7.1+cu110-cp38-cp38-linux_x86_64.whl # 本地的 torch 包
├── torchvision-0.8.2+cu110-cp38-cp38-linux_x86_64.whl # 本地的 torchvision 包
├── torchaudio-0.7.2-cp38-cp38-linux_x86_64.whl # 本地的 torchaudio 包
├── GDAL-3.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # 本地的 GDAL 包
└── (其他代码或文件)
3.最后项目 dockerfile 的实现
python
# 使用 Ubuntu 20.04 作为基础镜像
FROM ubuntu:20.04
# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
# 更新包管理器并安装基础工具
RUN apt-get update && \
apt-get install -y wget curl python3 python3-pip && \
rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 复制你的项目代码和数据集
COPY . .
# 创建输入输出文件夹
RUN mkdir /app/input
RUN mkdir -p /app/output
# 安装 numpy
RUN pip3 install numpy==1.21.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 torch 和 torchvision 和 torchaudio(本地包)
RUN pip3 install ./torch-1.7.1+cu110-cp38-cp38-linux_x86_64.whl && \
pip3 install ./torchvision-0.8.2+cu110-cp38-cp38-linux_x86_64.whl && \
pip3 install ./torchaudio-0.7.2-cp38-cp38-linux_x86_64.whl
# 安装其他依赖
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 gdal(本地包)
RUN pip3 install ./GDAL-3.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# 设置容器启动时执行的命令
CMD python3 inference.py && python3 save_location.py
最后一句代码解决我们之前提到的问题:先后运行a.py和b.py文件该怎么实现
4.requirements.txt 的记录
python
torch==1.7.1+cu110
torchaudio==0.7.2
torchvision==0.8.2+cu110
ultralytics
opencv-python-headless