- docker启devpi服务">docker启devpi服务
- 快速开始
- 本地pip安装实验
- http://0.0.0.0:7104/admin/devpi/+simple/ —trusted-host 0.0.0.0:7104">pip install tensorflow==2.2.0 -i http://0.0.0.0:7104/admin/devpi/+simple/ —trusted-host 0.0.0.0:7104
- vim ./pip/pip.conf
docker启devpi服务
https://lowin.li/2022/03/05/devpi/
2022-03-05
相关链接:
简要
- devpi工具相比其他pypi源工具,有如下特点:
- 节省硬盘:不必完全同步下来公开源的所有包,仅在第一次pip安装时从公开源下载和缓存。
- 支持上传接口文档:上传自己开发pip库时,可以把接口文档也上传到devpi。
- 本项目旨在用docker容器启动devpi服务。
背景
为什么要自己搭建pypi源服务
- 节省安装时间:当我们在内网打包镜像、安装python环境时,经常要反复从外网源下载pip库。即使改用国内的阿里源、豆瓣源,下载速度一般也只会在2~7MB/s左右,如果安装500MB的TensorFlow,下载+安装约需要2分钟。如果遇到网络不稳定,等待时间会更长,而从内网下载安装包,速度在100+MB/s !!!。
- 分享沉淀python库:内部开发的python库,如果在内部pip源平台上,以pip库的形式内部分享,可以减少很多重复性工作,也可以沉淀工作内容。
pip源工具对比
比较试用了几款常见的pip源工具,选择devpi工具搭建
工具 | 上传自己的pip包至服务 | 外网源同步至服务 | 安装体验 |
---|---|---|---|
pypiserver | 支持twine命令上传 | 不支持,需要自己下载 | 手动同步上千个包后index目录变卡 |
bandersnatch | 不支持命令上传包 | 自动同步,只能同步国外官方源,占硬盘多 | 白名单设置同步库较麻烦 |
devpi | 支持twine、devpi命令上传 | 采用缓存机制,不占用太多硬盘 | 第一次客户端pip安装,服务会从指定外网源下载,并存入服务硬盘,后面直接走缓存的硬盘 |
快速开始
手工编译
FROM python:3.9-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
COPY pip.conf /root/.pip/pip.conf
RUN apk add --update gcc python3-dev libffi-dev musl-dev && \
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'
FROM python:3.9-alpine
COPY --from=0 /srv/wheels /srv/wheels
VOLUME /srv/devpi
ENV DEVPISERVER_SERVERDIR=/var/lib/devpi
ENV SOURCE_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple/
RUN pip3 install --no-cache-dir --no-index --find-links=/srv/wheels devpi-server devpi-client devpi-web devpi-semantic-ui
COPY entrypoint.sh /srv/entrypoint.sh
LABEL maintainer="LowinLi <lowinli@outlook.com>"
ENTRYPOINT ["/srv/entrypoint.sh"]
修改了部分命令,适合国内网络运行。
编译好的镜像
https://www.123pan.com/s/7qLA-dfhzH 提取码:gfvi
docker run 方式
bash
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
version: "2.3"
services:
devpi-lib:
container_name: devpi-lib
image: lowinli98/devpi:v0.1
expose:
- 7104
ports:
- "7104:7104"
environment:
- DEVPISERVER_HOST=0.0.0.0
- DEVPISERVER_PORT=7104
- DEVPISERVER_ROOT_PASSWORD=password
- DEVPISERVER_USER=admin
- DEVPISERVER_PASSWORD=password
- DEVPISERVER_MIRROR_INDEX=pypi # 指定镜像index
- DEVPISERVER_LIB_INDEX=devpi # 指定上传index
- SOURCE_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple/ # 指定镜像源
restart: always
volumes:
- ./volume:/var/lib/devpi
访问devpi页面
本地pip安装实验
- 单次安装
bash ```pip install tensorflow==2.2.0 -i http://0.0.0.0:7104/admin/devpi/+simple/ —trusted-host 0.0.0.0:7104
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
- 修改默认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 ```
本项目特点
- 可以自由指定MIRROR源,尤其配置大陆pypi源可以提高搜索和下载速度,环境变量:
SOURCE_MIRROR_URL
- 通过索引继承方式,对MIRROR的index
DEVPISERVER_MIRROR_INDEX
和个人上传pip库的indexDEVPISERVER_LIB_INDEX
进行统一地址管理 - 使用了devpi-semantic-ui页面,可以更好的展示pypi库的版本信息、接口文档
- 在
examples/upload-demo
目录介绍一个例子,打包pip库、sphnix
生成接口文档,并上传到devpi服务。
截图
文章作者: 金属成色
文章链接: https://lowin.li/2022/03/05/devpi/