Python Server

发布于 更新于

AI总结: 本文介绍了如何自建PyPI仓库,使用pypiserver作为轻量级解决方案,适合个人和小团队。首先,通过Docker部署pypiserver,并配置docker-compose.yml文件以设置服务参数和持久化存储。接着,创建必要的目录并添加用户认证,确保安装htpasswd以管理用户密码。启动服务后,可以通过指定的IP访问仓库,上传包只需将其放入指定目录。客户端可以通过pip安装和配置,以便于从私有仓库下载包。此外,提供了查询和升级包的命令,以及使用twine上传包的步骤。改进建议包括详细说明如何处理常见错误和问题,以及提供更全面的安全性建议,例如使用HTTPS。

自建PyPI仓库

pypiserver

最简单、最轻量,适合个人、小团队或快速搭建。只需一个目录存放 .whl / .tar.gz 包。

Docker部署

  1. 准备docker-compose.yml
version: '3.8'  
services:  
  pypi-server:  
    image: pypiserver/pypiserver:latest          # 官方镜像  
    container_name: private-pypi  
    ports:  
      - "8080:8080"                              # 宿主机端口:容器端口,可改成 80 或其他  
    volumes:  
      - ./packages:/data/packages                # 存放包的目录(持久化)  
      - ./auth:/data/auth                        # 可选:存放密码文件  
    command:  
      - "-p"  
      - "8080"  
      - "--authenticate=update"                  # 认证方式:上传update、下载download、列表list  
      - "--passwords"  
      - "/data/auth/.htpasswd"                   # 如果启用认证  
      - "/data/packages"  
      - "--overwrite"                            # 允许覆盖同版本包  
    restart: always  
  1. 创建目录
mkdir -p packages auth  
  1. 添加认证

确认是否安装htpasswd, 未安装则安装

# CentOS  
yum install httpd-tools  
htpasswd -V  
cd auth  
# 创建用户 需输入两次密码  
htpasswd -B -c .htpasswd username  
  1. 启动服务
docker compose up -d  
  1. 验证
    访问
    http://你的服务器IP:8080/
    http://你的服务器IP:8080/simple

  2. 上传包
    只需要将whl包放到packages目录下,然后访问 http://你的服务器IP:8080/simple ,即可看到上传的包。

客户端

  1. 客户端下载
pip install some_package --index-url http://你的服务器IP:8080/simple/ --trusted-host 你的服务器IP  

如果服务器使用了https域名, 一般不需要配置--trusted-host

  1. 配置pip
    配置后, 下载时无需指定index-url
    pip config set global.extra-index-url http://你的服务器IP:8080/simple/  
    pip config set global.trusted-host 你的服务器IP  
    

Windows下配置文件路径如: C:\Users\Administrator\AppData\Roaming\pip\pip.ini

  1. 查询服务器包版本

    pip index versions some_package  
    

  2. 升级包

pip install -U some_package  

上传包

pip install twine  
twine upload --repository-url http://你的服务器IP:8080 --username user123 --password pass123 some_package.whl