部署私有 pip 库教程

准备工作

部署私有 pip 库需要使用 pypiserver 这个 Python 包。我们建议使用 docker 部署,方便快捷。首先我们到部署的服务器上,创建一个存放配置和包的目录,我的是:/var/www/pypiserver 。

我们使用了 Docker swarm 来部署,参考了这里的配置:https://github.com/pypiserver/pypiserver/blob/master/docker-compose.yml。以下是我的配置文件:

# /var/www/pypiserver/docker-compose.yml
version: "3.3"
services:
    pypiserver:
        image: pypiserver/pypiserver:latest
        volumes:
            - type: bind
              source: ./packages
              target: /data/packages
            - type: bind
              source: ./auth
              target: /data/auth
        command: -P /data/auth/.htaccess -a update,download,list /data/packages
        ports:
            - "8081:8080" 

从配置可以看出,我们需要在该目录下创建两个目录,一个用来存放 package,一个用来存放用户认证文件,目录结构如下:

.
├── auth
├── docker-compose.yml
└── packages

需要注意 packages 目录要开写权限,否则 docker 无法写入该目录,上传包会失败。

Auth

认证主要是为了从远程上传包的时候安全一点,具体步骤如下:

# 安装依赖
sudo pip3 install passlib 

# 生成 htpass 文件
htpasswd -sc .htaccess your_name # 会 prompt 密码输入,重复两遍一样的 

把上述文件放到 auth 目录即可。

启动

一切就绪后,在 /var/www/pypiserver 目录下运行以下命令,以 docker service 的方式(即 swarm 模式)运行 docker container:

docker stack deploy -c docker-compose.yml pip-server

这样,你的私有 pip 服务就启动了。

上传 Python 包

下一步,假设你本地的开发环境中,已经有了一个自己的 Python 包的源码,接下来就是构建和上传这个包。

# 安装依赖 
pip3 install wheel 
pip3 install -U setuptools # 可能需要升级,否则识别不了某些新的 setup.py 中的字段 

# build package 
python3 setup.py sdist bdist_wheel 

生成的 tar.gz 文件会被放在 dist 目录下。你可以直接把这个文件放到服务器的 packages 目录,这样直接就可以用了。但是我们觉得开发者可能会频繁改动代码,每次都手动上传并 copy 到那个目录,太麻烦了。我们准备使用工具从客户端直接上传这个包到 pypiserver。

# 安装上传工具,用于上传你 build 好的 package 到私有库
pip3 install twine 

在上传之前,我们还需要配置一下 ~/.pypirc,这个文件保存了你的 pip 库的路径和鉴权等信息,这样你就不用每次上传时都要输入密码了。这个文件长成这个样子:

[distutils] 
index-servers = 
  pypi 
  internal 

[pypi] 
username:<your_pypi_username> 
password:<your_pypi_passwd> 

[internal] 
repository: http://your_pipserver:8081 
username: <some_username> 
password: <some_passwd> 

如果你无意把私有包上传到公共仓库,pypi 部分可以删掉。接下来,运行一下命令就可以上传你的包了:

twine upload -r internal ./dist/yourpackage-0.0.1.tar.gz

会出现一个进度条,等走完了就大功告成了。

从私有库安装

运行下面命令即可安装

sudo pip3 install --trusted-host yourserver \
    --extra-index-url http://youruser:yourpass@yourserver:8081/simple \
    yourpackage 

这里有一些注意事项:

  1. 没有给服务器配置 https 的情况下,需要 --trusted-host 参数,否则 pip 会 ignore 这个仓库

  2. 如果你没有设置 Auth 的话,url 中就不需要 youruser:yourpass@ 这部分了;

  3. 如果你的 package 奇葩地和公共库中的某个包(和我们一样)重名了,你应该用 --index-url 来代替 --extra-index-url,这样它就会优先找你的包了。这样做的问题是你可能需要:

  4. 添加一个 --no-deps 参数,防止 pip 从你的库中寻找你的包的依赖(当然,它是找不到的,你只有你自己的包)

  5. 然后手动安装你的包的依赖

这就是搭建一个私有 pip 库的最简单方法。大功告成!
转自 https://zhuanlan.zhihu.com/p/99340587

posted @ 2022-10-17 15:17  MasonLee  阅读(545)  评论(0编辑  收藏  举报