Skip to content

搭建自己的nexus私有仓库2--创建python pypi代理

本文档是nexus系列课程第2篇。

本文计划做以下事情:

  • 使用nexus创建python pypi代理仓库。

以下是实验环境:

主机IP主机名操作系统docker版本自定义域名
1192.168.56.11nexusCentOS 7.6.181020.10.5nexushub.com
2192.168.56.12masterCentOS 7.6.181020.10.5

0. 准备工作

请在主机2以及你的电脑上面配置域名解析:

sh
[root@master ~]# tail -n 1 /etc/hosts
192.168.56.11 nexushub.com

注意,实际操作时,请将192.168.56.11替换成你服务器的内网IP或者公网IP,nexushub.com替换成你想使用的域名。

查看清华大学开源镜像站pypi的帮助信息: PyPI 镜像使用帮助

PyPI 镜像使用帮助

PyPI 镜像在每次同步成功后间隔 5 分钟同步一次。 pip 临时使用

sh
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

注意,simple 不能少, 是 https 而不是 http 设为默认

升级 pip 到最新的版本 (>=10.0.0) 后进行配置:

sh
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

如果您到 pip 默认源的网络连接较差,临时使用本镜像站来升级 pip:

sh
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

URL链接 https://pypi.tuna.tsinghua.edu.cn/simple就是我们需要使用的代理地址。

1. nexus创建pypi代理仓库

上一节中,我们知道通过点击页面顶部的齿轮设置图标:

进入到设置页面后,点击左侧的【Repositories】进入到仓库管理页面,点击【Create Repository】按钮,然后选择【pypi (proxy)】:

  • Name: 仓库名,需要唯一,不能与其他已经仓库的仓库重名,最好能通过名称知道仓库的意义。如我们pypi代理仓库,我们直接命名为pypi-proxy。
  • Remote storage: 远程存储仓库的URL地址,如我们直接代理清华大学的python pypi源,其地址是 https://pypi.tuna.tsinghua.edu.cn/simple, 但在配置远程地址时,需要将大部分国内源带的simple目录去掉,然后在访问时再将这个simple加上,因此我们填写 https://pypi.tuna.tsinghua.edu.cn
  • HTTP request setting,HTTP请求设置,我们一般只需要设置一下User-Agent请求头即可,如填写"Sync pypi repo. email: mzh.whut@gmail.com"。

配置完成后,保存。

保存后,点击新创建的pypi-proxy仓库,可以看到仓库详情: 这里的URL http://nexushub.com:8081/repository/pypi-proxy/ 就是我们代理仓库的地址。

客户端配置时,应使用 http://nexushub.com:8081/repository/pypi-proxy/simple 这个地址。

2. 客户端配置

直接将以下内容写入pip的配置文件~/.pip/pip.conf中:

ini
[global]
index-url = http://nexushub.com:8081/repository/pypi-proxy/simple
trusted-host = nexushub.com

查看pip配置信息:

sh
[root@master ~]# pip config list
global.index-url='http://nexushub.com:8081/repository/pypi-proxy/simple'
global.trusted-host='nexushub.com'
[root@master ~]#

安装python第三方包,如Flask,可参考 https://pypi.org/project/Flask/

sh
[root@master ~]# pip install Flask
Looking in indexes: http://nexushub.com:8081/repository/pypi-proxy/simple
Collecting Flask
  Downloading http://nexushub.com:8081/repository/pypi-proxy/packages/flask/2.0.3/Flask-2.0.3-py3-none-any.whl (95 kB)
     |████████████████████████████████| 95 kB 5.2 MB/s
Requirement already satisfied: itsdangerous>=2.0 in /usr/local/lib/python3.6/site-packages (from Flask) (2.0.1)
Requirement already satisfied: Jinja2>=3.0 in /usr/local/lib/python3.6/site-packages (from Flask) (3.0.3)
Requirement already satisfied: Werkzeug>=2.0 in /usr/local/lib/python3.6/site-packages (from Flask) (2.0.3)
Requirement already satisfied: click>=7.1.2 in /usr/local/lib/python3.6/site-packages (from Flask) (8.0.4)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.6/site-packages (from click>=7.1.2->Flask) (4.8.3)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib64/python3.6/site-packages (from Jinja2>=3.0->Flask) (2.0.1)
Requirement already satisfied: dataclasses in /usr/local/lib/python3.6/site-packages (from Werkzeug>=2.0->Flask) (0.8)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/site-packages (from importlib-metadata->click>=7.1.2->Flask) (3.6.0)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.6/site-packages (from importlib-metadata->click>=7.1.2->Flask) (4.1.1)
Installing collected packages: Flask
Successfully installed Flask-2.0.3
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[root@master ~]#
[root@master ~]# pip list|grep Flask
Flask               2.0.3
[root@master ~]#

可以看到,成功通过代理安装了Flask 2.0.3版本。

此时,在nexus界面Browse浏览器里面也可以看到刚才下载的Flask包被缓存了下来:

说明我们的pypi配置正确,代理仓库能够正常工作了!

3. 自动化配置准备

为了以后通过nexus api接口创建nexus仓库的自动化配置,将pypi-proxy代理仓库的相关信息配置到nexus.yaml配置文件中。

yaml
nexus_info:
  Repositories:
    - name: yum-proxy
      type: proxy
      format: yum
      remote_url: https://mirrors.tuna.tsinghua.edu.cn/centos/
      user_agent: Sync yum repo

    - name: epel-proxy
      type: proxy
      format: yum
      remote_url: https://mirrors.tuna.tsinghua.edu.cn/epel/
      user_agent: Sync yum repo

    - name: pypi-proxy
      type: proxy
      format: pypi
      remote_url: https://pypi.tuna.tsinghua.edu.cn
      user_agent: Sync python pypi repo

使用Python读取YAML配置文件,可参考 读取yaml配置文件

本首页参考 https://notes.fe-mm.com/ 配置而成