docker启devpi服务

https://lowin.li/2022/03/05/devpi/
2022-03-05

相关链接:

简要

  • devpi工具相比其他pypi源工具,有如下特点:
    1. 节省硬盘:不必完全同步下来公开源的所有包,仅在第一次pip安装时从公开源下载和缓存。
    2. 支持上传接口文档:上传自己开发pip库时,可以把接口文档也上传到devpi。
  • 本项目旨在用docker容器启动devpi服务。

背景

为什么要自己搭建pypi源服务

  1. 节省安装时间:当我们在内网打包镜像、安装python环境时,经常要反复外网源下载pip库。即使改用国内的阿里源、豆瓣源,下载速度一般也只会在2~7MB/s左右,如果安装500MB的TensorFlow,下载+安装约需要2分钟。如果遇到网络不稳定,等待时间会更长,而从内网下载安装包,速度在100+MB/s !!!
  2. 分享沉淀python库:内部开发的python库,如果在内部pip源平台上,以pip库的形式内部分享,可以减少很多重复性工作,也可以沉淀工作内容。

pip源工具对比

比较试用了几款常见的pip源工具,选择devpi工具搭建

工具 上传自己的pip包至服务 外网源同步至服务 安装体验
pypiserver 支持twine命令上传 不支持,需要自己下载 手动同步上千个包后index目录变卡
bandersnatch 不支持命令上传包 自动同步,只能同步国外官方源,占硬盘多 白名单设置同步库较麻烦
devpi 支持twine、devpi命令上传 采用缓存机制,不占用太多硬盘 第一次客户端pip安装,服务会从指定外网源下载,并存入服务硬盘,后面直接走缓存的硬盘

快速开始

手工编译

  1. FROM python:3.9-alpine
  2. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
  3. COPY pip.conf /root/.pip/pip.conf
  4. RUN apk add --update gcc python3-dev libffi-dev musl-dev && \
  5. pip3 wheel --wheel-dir=/srv/wheels pip 'devpi-server==6.4.0' 'devpi-client==5.2.3' 'devpi-web==4.0.8' 'devpi-semantic-ui==0.2.2'
  6. FROM python:3.9-alpine
  7. COPY --from=0 /srv/wheels /srv/wheels
  8. VOLUME /srv/devpi
  9. ENV DEVPISERVER_SERVERDIR=/var/lib/devpi
  10. ENV SOURCE_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple/
  11. RUN pip3 install --no-cache-dir --no-index --find-links=/srv/wheels devpi-server devpi-client devpi-web devpi-semantic-ui
  12. COPY entrypoint.sh /srv/entrypoint.sh
  13. LABEL maintainer="LowinLi <lowinli@outlook.com>"
  14. ENTRYPOINT ["/srv/entrypoint.sh"]

修改了部分命令,适合国内网络运行。

编译好的镜像
https://www.123pan.com/s/7qLA-dfhzH 提取码:gfvi

docker run 方式

bash

  1. docker run -d --name devpi-lib -p 7104:7104 --env DEVPISERVER_HOST=0.0.0.0 --env DEVPISERVER_PORT=7104 --env DEVPISERVER_USER=admin --env DEVPISERVER_MIRROR_INDEX=pypi lowinli98/devpi:v0.1

docker-compose 方式

yaml

  1. version: "2.3"
  2. services:
  3. devpi-lib:
  4. container_name: devpi-lib
  5. image: lowinli98/devpi:v0.1
  6. expose:
  7. - 7104
  8. ports:
  9. - "7104:7104"
  10. environment:
  11. - DEVPISERVER_HOST=0.0.0.0
  12. - DEVPISERVER_PORT=7104
  13. - DEVPISERVER_ROOT_PASSWORD=password
  14. - DEVPISERVER_USER=admin
  15. - DEVPISERVER_PASSWORD=password
  16. - DEVPISERVER_MIRROR_INDEX=pypi # 指定镜像index
  17. - DEVPISERVER_LIB_INDEX=devpi # 指定上传index
  18. - SOURCE_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple/ # 指定镜像源
  19. restart: always
  20. volumes:
  21. - ./volume:/var/lib/devpi

访问devpi页面

http://0.0.0.0:7104

本地pip安装实验

pip3 install -i http://192.168.204.129:7104/admin/pypi/+simple/ —trusted-host 192.168.204.129:7104 httpx

pip3 install -i http://192.168.204.129:7104/admin/pypi/+simple/ —trusted-host 192.168.204.129:7104 flask

  1. - 修改默认pip安装源<br />vim

vim ./pip/pip.conf

[global] index-url = http://192.168.204.129:7104/admin/pypi/+simple/ trusted-host = 192.168.204.129:7104 ```

本项目特点

  1. 可以自由指定MIRROR源,尤其配置大陆pypi源可以提高搜索和下载速度,环境变量:SOURCE_MIRROR_URL
  2. 通过索引继承方式,对MIRROR的indexDEVPISERVER_MIRROR_INDEX和个人上传pip库的indexDEVPISERVER_LIB_INDEX进行统一地址管理
  3. 使用了devpi-semantic-ui页面,可以更好的展示pypi库的版本信息、接口文档
  4. examples/upload-demo目录介绍一个例子,打包pip库、sphnix生成接口文档,并上传到devpi服务。

截图

docker启devpi服务 _ 金属成色 - 图1

docker启devpi服务 _ 金属成色 - 图2

docker启devpi服务 _ 金属成色 - 图3


文章作者: 金属成色

文章链接: https://lowin.li/2022/03/05/devpi/

版权声明: 本博客所有文章除特别声明外,均采用CC BY 4.0 许可协议。转载请注明来源 金属成色 !

docker pip devpi