PyPI 私有仓库指北

私有仓库选型

常见开源项目

服务 镜像 代理 发布 UI Docker 特点
warehouse 官方PYPI项目
bandersnatch 提供全量同步的服务
pypiserver ✔(重定向) 最简单的代理、发布服务
devpi-server 代理、缓存方面非常出色
localshop ✔(重定向) 比较完善,开箱即用
pyshop ✔(重定向) 部署简单、配置丰富

上表中的概念解释:

  • 镜像指是否提供定时全量同步的镜像服务。
  • 代理是指下载时会自动搜寻官方的源或其它镜像,不会全量同步。 上面列出的几个有代理功能的服务,细节各不相同。比如,是真的代理,还是假的,仅仅只是URL重定向。 这两种方式的区别是,当客户端所在的机器无法访问外部源时(比如隔离外网的工作站),前者可以正常工作,而后者不行。 当然,严格地说,重定向并不能称为代理,只是对服务端来说形式类似 。
  • 发布指是否允许发布私有的Python包。
  • UI指是否包含某种形式的UI界面,主要是浏览器中的网页界面。 只有简陋UI的服务,也被认为是没有UI,比如devpi-server
  • Docker指在源码库中,是否自动支持Docker技术,自带Dockerfile、docker-compose.yml等文件。 即使不支持Docker的服务,也可以自制;而已经支持的服务,也只是调试方便,要实用前往往也需自制。

企业级仓库 —— Nexus Repository OSS

Nexus Repository OSS 是一个开源的仓库管理系统,提供了更加丰富的功能,而且安装、配置、使用起来也更加简单方便。 官方网站

它可以管理以下形式的仓库:

  • Bower
  • Docker
  • Git LFS
  • Maven
  • npm
  • NuGet
  • PyPI
  • Ruby
  • Gems
  • Yum
  • Proxy

其中,PyPI类的服务,支持三种:

  • proxy,提供代理服务。
  • hosted,提供私有包的发布服务。
  • group,组合以上两类的多个服务到一起,通过同一个URL对外提供。

私有仓库使用

包下载

pip命令指定仓库地址

pip install flask -i http://<repository-path>/simple

或修改用户pip配置 ~/.pip/pip.conf

[global]
index-url = http://<repository-path>/simple
trusted-host = <repository-host>

包发布

修改当前用户.pypirc文件 ~/.pypirc(没有请创建)

[distutils]
index-servers =
pypi
pypitest
privaterepo

[pypi]
repository:https://pypi.python.org/pypi
username:your_username
password:your_password

[pypitest]
repository:https://testpypi.python.org/pypi
username:your_username
password:your_password

[privaterepo]
repository=http://<repository-path>/
username=your_username
password=your_password

指定发布包仓库

python setup.py sdist upload -r privaterepo
# 使用twine
twine upload -r privaterepo dist/*

参考:

0%