应用场景:
很多时候,生产环境或其他特殊环境的服务器无法联网,最终导致无法直接使用pip install
进行下载第三包。且需要把本地环境的包批量迁移到上述的服务器。
环境、工具准备
- python环境;
- pip工具;
- 腾讯源:http://mirrors.cloud.tencent.com/pypi/simple/
注:强烈推荐腾讯源,当使用离线下载的时候极有可能需要亲自到源上找包,腾讯源的好处是所有的包按照名称排序,可以通过ctrl + F
快速找包。其他源可自行感受,不再展开描述。
操作流程
-
生成安装目录
pip freeze > requirements.txt
将当前环境的包以列表形式导入到 requirements.txt; -
生成安装包文件夹
pip download -d 文件夹名 -r requirements.txt
根据目录文件下载包到文件夹; -
将文件夹以及requirements.txt文件复制到离线的服务器,路径看个人喜好;
-
执行批量安装
pip install --no-index --find-links=文件夹名/ -r requirements.txt
正常来说已经执行完毕,但很多情况下本地python版本不一定和线上的一致,最终导致个别包会安装失败,报错!
以下为报错处理的流程(本人亲身经历并总结):
1、vi requirements.txt
将报错的包先注释,直至安装完成;
2、对注释的包进行单独处理
(因为作者工作环境只能用win 不能安装Vm,因此我导出来的包直接放linux环境肯定一堆报错!!!)
如安装pandas为例:
-
下载单个离线包:
pip download -d 文件夹名 pandas==1.0.0
; -
可以看到pip会把依赖都会下载回来
-
细心发现,pandas包的后缀是win环境的,直接放linux肯定不行,这时候我们就可以用上述工具中的腾讯源
选中之后下载到本地; -
将下载的包
pandas-1.0.0-cp38-cp38-manylinux1_x86_64.whl
改成
pandas-1.0.0--py2.py3-none-any.whl
并替换步骤2中的pandas文件(不改名称很有可能安装不成功)
-
将步骤2文件夹放入离线服务器并执行代码
pip install --no-index --find-links=文件夹名 pandas==1.0.0
-
执行完毕,如果仍然失败可留意报错信息,要么是依赖包之间版本不对称,要么是python版本下载了高于当前版本号的包。
结语:网上很多版本都是一笔带过,可能大家都没遇到这种问题,这篇文章主要对报错处理进行补充说明。