考虑搭建python内部仓库的原因主要有两点:
公司生产区无法访问官方仓库,无法安装python包
使用python开发众多系统会有一些通用的功能,如统一登录、统一权限等等。可以将这些功能整合到一个内部通用的python包来分发,避免重复工作,升级管理也比较方便
在搭建内部仓库时,首先要考虑的是选型,在深入调研了pypiserver、devpi后,我选择了devpi.原因如下:
devpi支持本地缓存(只需在部署仓库的服务器上开启外网访问,需要安装包的服务器只需要与仓库连通)
devpi支持从其他python源下载包后缓存到本地,而不从官方仓库下载(国内访问官方参考比较慢)--这个是与devpi的开发人员沟通后才搞定的。pypiserver只支持重定向(仓库中不存在时让需要安装包的服务器从其他源下载,这种对于服务器无法访问外网的情况就无法使用)。有兴趣的可以看下 how to change default mirror url pypi.python.org/simple/ with devpi-server
下面是一些我认为比较重要的地方,详细文档可以直接看官方文档
devpi 是分为server、client、web几个部分的,通过pip安装时会自动安装这三个库
一些配置信息可以通过client 来设置(如创建用户、设置密码、配置mirror_url等)
安装完成后可以通过如下命令来启用: 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
下面是效果图:
test