在python项目中,需要引入第三方的包,可以通过pip很简单的引入;但是有个问题,公司内部的包,也不能发布到pypi仓库吧,所以搭建自己的私服就很有必要了,下面介绍一下基于PypiServer搭建私服的教程
I. 搭建教程
1. 安装方式
首先确认我们的环境时Centos,python版本为3.7
安装命令比较简单,如下
pip install pypiserver
# 下面指定python包存储的路径
cd ~/
mkdir -p python-repository/packages
上面完成之后,就可以开启私服了
pypi-server -p 8080 -P . -a . ~/python-repository/packages
上面的 -P . -a .
表示我们开启的私服,不要求安全校验,可以直接下载和上传包
2. 安全校验
上面的没有加安全限制,实际场景可能就不太合适了,如果我们要加上用户名/密码限制,可以如下配置
安装 htpasswd
pip install passlib
yum -y install httpd-tools
生成密码文件: 用户名+密码= user/pwd123456
htpasswd -sc htpasswd.txt user
上面执行之后,会提示输入密码,完成之后,就over了
接下来,我们启动私服,需要修改一下启动命令,下面-a list
表示上传,下载,查看包都需要校验
pypi-server -P htpasswd.txt -a list -p 8888 ~/python-repository/packages
3. 使用说明
前面的私服算是搭建完成了,接下来就是使用姿势了,对我们而言,需要关注的无非安装和发布两个操作了
发布包
首先设置配置文件,vim ~/.pypirc
[distutils]
index-servers =
local
[local]
repository: http://127.0.0.1:8888
username: user
password: pwd123456
[install]
trusted-host=https://127.0.0.1:8888
然后需要将setup.py 编写好
from setuptools import setup, find_packages
setup(
name='my_server_package',
version='1.1.21',
packages=find_packages(),
description="Test",
long_description="""
- 1.0.0
init
- 1.0.1
test
- 1.0.2
添加xxx方法
- 1.0.3
删除xxx方法
""",
author='xl',
author_email='xl@llzou.com',
url='https://pypi.ironmanfunds.club/packages/',
requires=[
'numpy',
'pyecharts',
'pandas',
]
)
- 上方文件的
long_description
可以详细记录一些细节信息,方便后续整理 - 注意版本号是升序的,
1.1.2
是要大于1.0.999
,如果不按照升序写,它内部会一直打包他认为最大的那个版本,你的更新就不会出现 - 注意:使用
find_packages
默认只打包.py文件,对于目录是只打包有__init__.py
的;如果需要打包额外的数据,比如css、js哪些,需要设置MANIFET.in
文件
然后到需要上传的项目下,执行下面的命令即可
python3.7 setup.py sdist upload -r local
安装包
我们通过pip进行包安装,默认是从pypi.org
下载包,所以需要额外设置下从私服下包
设置配置文件: vim ~/.pip/pip.conf
[global]
# 这个位置设置下载包的时候从哪个位置获取,这里设置的是阿里源和自己的
trusted-host=mirrors.aliyun.com
127.0.0.1:8888 # 这个位置可以跟上面的阿里镜像源一样填写域名,需要自己映射一下
# 设置具体的位置,优先从阿里源获取,如果没有找到会再去自己服务器上找
index-url = http://mirrors.aliyun.com/pypi/simple/
# 将私服的用户名和密码写在url中,就不用每次上传的时候再填入
extra-index-url = http://user:pwd123456@127.0.0.1:8888
其中 extra-index-url 的value 前面是用户名:密码,注意走的是http协议,因此需要在下面配置上信任host
上面配置完毕之后,下载包就可以和之前的操作一样了;
由于我们已经配置了阿里的源,所以下载其他的包也是没有问题的;
无缝衔接
# 会去阿里源上下载,更正常流程一样
pip install request
# 会先从阿里云上查找,找不到会去我们的服务器上查找,找到后会开始下载
pip install my_server_package
查看包列表
可以在浏览器上通过url打开PypiServer的界面,会显示所有历史包的压缩包,可以根据需求下载历史包