需求
- 公司内部python接口封装、web PO模型封装等,后续需要单独打包,形成统一形式,降低代码耦合,并且这些打包文件不能上传到Pypi官方服务器,所以需要单独搭建私有Pypi服务器,仅公司内部使用
需求详解
- 私有Pypi服务器必须具备以下两点功能:
- 可以通过
twine upload
的形式上传新打包好的python库 - 可以通过
pip install
的形式下载服务器上现有的python库
- 可以通过
- 不需要具备的功能:
- 同步Pypi官方源(如果同步官方源的话,会大量消耗服务器存储资源,如果需要下载官方源的库,可以通过终端修改为国内源的方式解决)
解决方案
- 调研发现,
pypiserver
模块可以满足现有需求
搭建方式
pypiserver
是封装好的一个私有Pypi服务器,直接安装启动即可实现服务,但是需要一些额外配置,下面具体描述
下载安装
- 执行命令
pip install pypiserver
即可下载
运行
- 服务器内创建一个文件夹,用于存放python库:
mkdir pypi_packages
- 运行服务:
pypi-server run -p 8080 ./pypi_packages
服务端口号即为设定的8080端口
上传设定
如果只是运行起来,是无法直接向服务器内上传打包好的python库的,如果要实现流水线打包上传,需要执行以下操作
- 上传身份验证
- 通过
htpasswd
命令生成验证文件:htpasswd -c ./htpasswd pypiuser
,然后输入校验密码 - 如果命令报错,则需要安装该命令模块:
yum install httpd-tools
- 通过
- 服务中加入上传身份校验
- 安装Python密码校验库:
pip install passlib
- 执行命令:
pypi-server -p 8080 --passwords ./htpasswd packages/
即可加入身份校验
- 安装Python密码校验库:
pip下载配置
上述只是将Pypi Server搭建完成了,但是本地
pip install
安装还是有些问题,需要执行以下配置
- 用户根目录创建
.pip
目录,并在目录内创建pip.conf
配置文件 - 在
pip.conf
配置文件中,写入以下内容,保存
[global]
index-url = http://your_pypiserver_ip:port/simple/
trusted-host = your_pypiserver_ip
- 其中
your_pypiserver_ip
为当前Pypi私有服务器IP,或公司内部解析到IP上的域名
搭建完成
至此,一个私有的服务就搭建完成了,即可使用 yum install
实现下载。