用docker创建私服
使用docker compose 启动私服 (/packages 为外挂的缓存目录)
services:
pypi:
image: pypiserver/pypiserver:v2.1.1
environment:
- PYTHONUNBUFFERED=1
network_mode: host
volumes:
- /packages:/data/packages
command: --fallback-url https://pypi.tuna.tsinghua.edu.cn/simple /data/packages
创建shell脚本拉取依赖
在 /packages 目录里面创建一个requirements.txt文件里面写依赖包。
# cat requirements.txt
setuptools==70.3.0
certifi==2024.7.4
把下面pull.sh也放到/packages 里面。
#!/bin/bash
pip install --upgrade pip -i https://pypi.mirrors.ustc.edu.cn/simple/
for i in `cat ../requirements.txt`;do
pip download -d . -i https://pypi.tuna.tsinghua.edu.cn/simple/ $i
done
把包放到私服里面
启动一个临时容器,镜像为构建时的基础镜像,保持环境一致。
docker run --rm -it -v /packages:/packages -w /packages python:3.11.9-bookworm /bin/bash pull.sh
构建时使用私服地址
FROM python:3.11.9-bookworm
# 设置默认时区
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# 防止Python缓冲stdout和stderr,以避免出现以下情况
# 由于缓冲,应用程序在没有发出任何日志的情况下崩溃。
ENV PYTHONUNBUFFERED=1
# 复制应用
COPY . /app/
WORKDIR /app
# 安装依赖包
RUN pip install -i http://192.168.1.9:8080/simple --trusted-host 192.168.1.9 -r requirements.txt
# 暴露容器端口
EXPOSE 80
# 运行应用程序
CMD [ "/bin/bash", "-c", "python server.py" ]