Python 部署私有 pip 库

Python 部署私有 pip 库

image

本教程使用的是 pypiserver 这个 Python 包,其文档见:https://pypi.org/project/pypiserver/,Github 地址:https://github.com/pypiserver/pypiserver

1 - 环境介绍

操作系统:cent OS 7.6

image

Python 版本:3.7.3

image


2 - 准备工作

2.1 创建相关目录

# 创建服务器目录
mkdir -p /usr/local/pypi-server

cd /usr/local/pypi-server

# 创建后续管理包的目录
mkdir packages

# 创建认证目录
mkdir auth

image

后续相关的操作,非特别说明,均在 /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/

image


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

image

注意:如果提示没有 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
posted @ 2023-02-25 15:52  ChaosMoor  阅读(1164)  评论(0编辑  收藏  举报