构建局域网内的 PIP 镜像
构建局域网内的 PIP 镜像
针对离线局域网的研发环境,需要构建局域网内的 PIP 镜像。整个过程分为两个阶段,第一阶段是批量下载 PIP 包构建镜像,第二阶段是下载缺失的 PIP 包,丰富镜像。
以下步骤适用于 Windows 系统。
1. 第一阶段
在本地搭建一个 PyPi 索引库,即:将网络上的 Python 包备份到本地并进行索引管理,然后局域网内部用户通过 pip 安装时指向本地镜像库,即可实现 Python 包的安装。
官方:https://pypi.org/simple
清华:https://pypi.tuna.tsinghua.edu.cn/simple
百度:https://mirror.baidu.com/pypi/simple/
阿里:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
# 示例
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
1.1 安装 pip2pi
首先安装 pip2pi 模块,其主要功能是将本地的模块包进行索引管理。
pip install pip2pi
1.2 下载模块包到本地
正常情况下,你在外网机器上已经有工程,所以先将工程依赖导出到 requirements.txt 中。
pip freeze > requirements.txt
下载模块包到本地的 dir 目录中。
pip download -d dir -r requirements.txt --trusted-host mirrors.aliyun.com
在批量现在过程中,可能有一些包无法下载,这时需要手动下载。你可以把不能下载的包先从 requirements.txt 中删除,然后单独下载。
1.3 创建索引
包全部下载完成后,创建索引。
dir2pi -S ./dir
完成之后进入文件夹,双击 index.html 可以看到索引效果。
将文件夹拷贝到离线环境中,接下来在离线环境中进行配置。
1.4 使用 nginx 搭建镜像库
找到 nginx.conf 文件,修改如下几个内容:
server{
listen 80;
server_name 你的IP地址
root 【拷贝进来的文件夹】的路径
}
nginx 配置没啥好说的,能够正常访问http://127.0.0.1:80/simple/即可。
1.5 使用镜像
# 临时指定,并安装
pip install xxx -i http://127.0.0.1:80/simple/
# 永久指定,并安装
pip config set global.index-url http://127.0.0.1:80/simple/
pip install xxx
2. 第二阶段
镜像库已经安装完成了,但是使用的过程中,总会缺少一些库,这个时候就行丰富镜像库的阶段。
假设缺少了 torch 库。
2.1 在外网下载 torch 库
#将库下载到dir文件夹中
pip3 download -d ./dir/ torch --trusted-host mirrors.aliyun.com
2.2 添加到索引中
将下载的 whl 文件拷贝到离线环境中,放到索引文件夹的对应位置。此时有两种情况。
- 有老的版本
这个时候你只需要把 whl 文件放到老版本所在文件夹,之后修改文件夹下的 index.html 文件,添加新的版本文件。
- 没有老的版本
这个时候是没有对应的文件夹的,你需要新建文件夹,然后把 whl 文件放到文件夹中,之后创建新建文件夹下的 index.html 文件,添加新的版本文件。并且修改 simple 文件夹下的 index.html 文件,添加新的包路径。
如果你不知道新建文件夹的名称,你可以在外网中先索引以下,把索引之后的文件夹拷贝 simple 中,这是对应的 index.html 文件也有了。
2.3 说明
索引之后,simple 文件夹清晰,包括 index.html 和包文件夹。index.html 文件中包含了所有的包,包文件夹中包含了对应包的所有的版本和属于包的 index.html 文件。