pip私有源服务搭建

在服务器有网络的情况下,直接配置公开的源,速度已经非常快,也很方便。然而有些情况下服务器不方便安装网络,使用python安装包就变得非常麻烦,下载文件然后上传很折腾,如果团队这么做效率很低,这时就需要搭建私有的pip源。

网上看了一些文章基本都是在服务器直接安装配置,本文采用docker的方式部署,操作简单,配置少,经过验证效果挺好的。

服务安装

采用docker的部署方式,减少环境依赖和命令配置。

docker pull muccg/devpi:latest

启动docker或者编写docker-compose.yaml文件,这里直接写配置文件比较方便

version: "3"
services:
  devpi-lib:
    container_name: devpi-lib
    image: muccg/devpi:latest
    expose:
      - 11023
    ports:
      - "11023:11023"
      - "3141:3141"
    environment:
      - DEVPISERVER_HOST=ip
      - DEVPISERVER_PORT=11023
      - DEVPISERVER_ROOT_PASSWORD=password
      - DEVPISERVER_USER=cj
      - DEVPISERVER_PASSWORD=password
      - DEVPISERVER_MIRROR_INDEX=pypi                    # 指定镜像index
      - DEVPISERVER_LIB_INDEX=devpi                      # 指定上传index
      - SOURCE_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple  # 指定镜像源
    restart: always
    volumes:
      - /mnt/hdd2/pypi:/var/lib/devpi

需要指定上面的ip,多起一个端口11023,以防后续使用。挂载一个目录用于后续文件交换。重要的配置为SOURCE_MIRROR_URL,对于没有的安装包从这个地址下载。容器启动后服务的端口为3141,需要配置着个端口。

启动服务:

docker-compose -f docker-compose.yaml up -d

测试安装包

需要改上面的ip地址,可以看到正常使用了。

pip install transformers -i http://ip:3141/root/pypi  --trusted-host ip

第一次安装包,速度非常慢,这是因为需要从安装源下载,后续再安装对应的包,直接从服务器缓存拉取,速度非常快。不过速度太慢也有办法处理,那就是在服务端下载好包文件,然后upload到服务器上。

文件上传到pip仓库

下载安装包到上面的挂载目录/mnt/hdd2/pypi

pip wheel --wheel-dir /mnt/hdd2/pypi/ -r req.txt --cache-dir .cache/abc

准备上传文件,需要进入到容器中,对于容器不熟练的请自行查找命令。

docker exec -it container-id /bin/bash # 进入容器
devpi login root # 无密码直接回车
devpi upload --from-dir /var/lib/devpi #可以看到上传

之后再测试,安装包的速度可以达到几十上百MB。

配置反向代理

经过多用户测试,并发很低,很多情况下可能会报错,应该是服务无法处理并发,配置nginx反向代理可以解决,不过先搭建好了,凑合用等用来经常出问题再配置吧。如果你碰到这个问题请自行配置nginx代理。

配置默认源

创建配置文件

# vim ~/.pip/pip.conf
[global]
index_url = http://<host_ip>:3141/root/pypi/
trusted-host = <host_ip>
[search]
index = http://<host_ip>:3141/root/pypi/