Python 部署私有 pip 库
Python 部署私有 pip 库
本教程使用的是 pypiserver 这个 Python 包,其文档见:https://pypi.org/project/pypiserver/,Github 地址:https://github.com/pypiserver/pypiserver
1 - 环境介绍
操作系统:cent OS 7.6
Python 版本:3.7.3
2 - 准备工作
2.1 创建相关目录
# 创建服务器目录
mkdir -p /usr/local/pypi-server
cd /usr/local/pypi-server
# 创建后续管理包的目录
mkdir packages
# 创建认证目录
mkdir auth
后续相关的操作,非特别说明,均在 /usr/local/pypi-server 目录下
2.2 认证授权
这一步主要是为了保护你的 pip 库不能随意被上传、下载;pypiserver 采用的是 Apache-Like Authentication (htpasswd)
# 安装生成授权工具的命令
yum -y install httpd-tools
# 生成授权文件, 会 prompt 密码输入,重复两遍一样的 ChaosMoor
htpasswd -sc .chaos-moor-auth ChaosMoor
# 移动文件到 auth 目录下
mv ./.chaos-moor-auth auth/
3 - 运行服务
3.1 运行服务
我这里是用 Python 虚拟环境运行的
# 创建虚拟环境并激活
python -m venv runvenv
source runvenv/bin/activate
# 安装依赖模块
pip install pypiserver
pip install passlib
# 运行
pypi-server run \
-i 10.206.0.2 \
-p 12200 \
-a update,download \
-P /usr/local/pypi-server/auth/.chaos-moor-auth \
-o \
--fallback-url https://mirrors.aliyun.com/pypi/simple/ \
/usr/local/pypi-server/packages &
# 可以通过 curl 命令查看是否启动成功
curl http://10.206.0.2:12200
注意:如果提示没有 pypi-server 命令,把 pypi-server run 换成 python -m pypiserver run
3.2 pypi-server 参数说明
参数 | 说明 | 示例 |
---|---|---|
-i | host,默认 0.0.0.0 | -i 10.206.0.2 |
-p | 端口,默认 8080 | -p 12200 |
-a | 对那些操作进行密码验证,update|download|list,逗号分隔 | -a update,download |
-P | 指定认证秘钥文件 | -P auth.txt |
--fallback-url | 当本 pip 库没有时,到这个源去找 | --fallback-url https://mirrors.aliyun.com/pypi/simple/ |
-o | 上传时允许覆盖已经存在的包 | -o |
还有一些其他的参数,可以参照官方文档
3.3 客户端的使用
# 直接进行安装就行
pip install --trusted-host 10.206.0.2 --index-url http://10.206.0.2:12200/simple/ package-name
# 也可以对 pip 进行全局设定
pip config set install.trusted-host 10.206.0.2
pip config set global.extra-index-url http://10.206.0.2:12200/simple/
# 设定后直接用 pip 安装
pip install package-name
注意:如果在没有 https 的远程 url 上安装了 pypiserver,安装时将收到来自 pip 的“不受信任”警告,这时候需要 --trusted-host 选项。 也可以进行相关配置
3.4 Nginx 反向代理
我在 Nginx 进行了 SSL,所以我这里用 Nginx 做了一层反向代理,
server {
location /pypi/ {
proxy_set_header X-Forwarded-Host $host:$server_port/pypi;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://10.206.0.2:12200/;
}
}
注意:path 只能是 pypi
3.5 包的上传
如果我们不想手动的把包拖入到 package 文件夹下,可以通过以下进项上传
# 安装 twine 工具
pip3 install twine
twine upload dist/zither-2.1.0.tar.gz --repository-url http://10.206.0.2:12200