考虑搭建python内部仓库的原因主要有两点:

  1. 公司生产区无法访问官方仓库,无法安装python包

  2. 使用python开发众多系统会有一些通用的功能,如统一登录、统一权限等等。可以将这些功能整合到一个内部通用的python包来分发,避免重复工作,升级管理也比较方便

在搭建内部仓库时,首先要考虑的是选型,在深入调研了pypiserver、devpi后,我选择了devpi.原因如下:

  1. devpi支持本地缓存(只需在部署仓库的服务器上开启外网访问,需要安装包的服务器只需要与仓库连通)

  2. devpi支持从其他python源下载包后缓存到本地,而不从官方仓库下载(国内访问官方参考比较慢)--这个是与devpi的开发人员沟通后才搞定的。pypiserver只支持重定向(仓库中不存在时让需要安装包的服务器从其他源下载,这种对于服务器无法访问外网的情况就无法使用)。有兴趣的可以看下  how to change default mirror url pypi.python.org/simple/ with devpi-server 


下面是一些我认为比较重要的地方,详细文档可以直接看官方文档

  1. devpi 是分为server、client、web几个部分的,通过pip安装时会自动安装这三个库

  2. 一些配置信息可以通过client 来设置(如创建用户、设置密码、配置mirror_url等)

  3. 安装完成后可以通过如下命令来启用: devpi-server --port 4041 --serverdir /data/project/devpiserver --outside-url=http://pypi.xxxxx.com    可以通过supervisor启动多个端口,然后nginx做反向代理



以下一些命令:

  • 客户端连接服务端:

    devpi use http://pypi.xxx.co

  • 首次登陆:

    devpi login root --password ''   (首次启动密码为空)

  • 修改密码:

    devpi user -m root password=123

  • 退出登陆:

    devpi logoff

  • 创建新用户

    devpi user -c alice password=456  email=alice@example.com

  • 登陆新用户

    devpi login alice --password=456

  • 创建索引

    devpi index -c dev bases=root/pypi

  • 使用索引

    devpi use alice/dev 

  • 上传包

    devpi upload   (在setup.py所在目录下执行)

    devpi upload --with-docs  (支持sphinx创建的文档,需要docs目录和setup.py在同个目录下)

  • 设置当仓库中不存在包时 从豆瓣下载包缓存到本地(默认是从官方源下载的)

    devpi index alice/dev mirror_url="https://pypi.doubanio.com/simple/"

  • 修改devpi web的首页

    如果想要定制首页,可以修改 site-packages/devpi_web/templates/root.pt

下面是效果图:

image.pngimage.png

image.png


1条留言:
test 发表于 2017-12-30 16:42

test

您来留言:
Captcha