使用 pip 在线安装依赖包如此便捷,尤其是配置了镜像源的情况下,为什么会有离线安装这样的需求?
在版本更新很快的现如今,两年前部署的工作环境已经是“古董”级别的了,此时,若是有调试bug的需求,就需要完整的克隆生产环境,如果使用pip安装,版本问题会造成很大的困扰,即使使用requirement.txt,也还是会有某一模块找不到或版本不匹配(至少我遇到过),这里记录一下,下载当前环境的所有whl安装包的方法和离线安装的操作(当出现网络异常时,这个方法可以暂时补救)
一·相关指令
首先,记录操作过程中所用到的几个指令。
1.pip freeze 以requirements的格式列举已经安装的依赖包
# pip freeze
D:\workon_home
(quickstart) $ pip freeze --help
Usage:
pip freeze [options]
Description:
Output installed packages in requirements format.
按照requirements的格式,输出已安装的依赖包
packages are listed in a case-insensitive sorted order.
安装包的名称是一大小写不敏感的字母顺序进行排列的
2.pip download 安装包下载
(quickstart) $ pip download --help
Usage:
pip download [options] <requirement specifier> [package-index-options] ...
pip download [options] -r <requirements file> [package-index-options] ...
pip download [options] <vcs project url> ...
pip download [options] <local project path> ...
pip download [options] <archive url/path> ...
Description:
# 通过以下途径下载依赖包
Download packages from:
- PyPI (and other indexes) using requirement specifiers.
- VCS project urls.
- Local project directories.
- Local or remote source archives.
# pip 同样支持通过requirement文件进行下载,这种方式使得下载整个环境变得方便快捷
pip also supports downloading from "requirements files", which provide
an easy way to specify a whole environment to be downloaded.
3.安装离线包
pip install --no-index --find-links=packages_path -r requirements_file_path
# 忽略依赖包的网络路径,仅仅从--find-links参数所提供的路径进行安装
--no-index Ignore package index (only looking at --find-links URLs instead).
# 如果url所指向的是一个html网页,则将其中指向tar.gz或whl文件的链接进行下载并安装;如果使用的是本地文件夹或文件夹,则安装此文件或文件夹里面的所有的文件;不支持VCS链接
-f, --find-links <url> If a URL or path to an html file, then parse for links to archives such as sdist(.tar.gz) or wheel (.whl) files. If a local path or file:// URL that's a directory, then look for archives in the directory listing. Links to VCS project URLs are not supported.
二·操作步骤
在开始之前,说明一下,执行安装包列表输出和安装包下载的是指已经部署好的环境,而且还得是联网的,只有安装的时候可以是离线的。
1.首先,输出安装包的列表与对应的版本号,即requirements格式,输出到文件
2.下载reqirements文件中的依赖包到指定文件夹
3.在需要安装环境的机器上执行安装指令,将安装路径指向已下载安装包的文件夹
# 查询安装包列表,并将结果写入requirements.txt文件
pip freeze > requirements.txt
# 下载requirements.txt文件指定的依赖包,并保存到当前目录的env_packages文件夹下
pip download -r requirements.txt -d ./env_packages
# 请注意,这一步操作在您的调试机器上执行
# 指定安装包的文件夹位置,和安装包列表文件requirements.txt
pip install --no-index --find-links=d:\workon_home\env_packages -r d:\workon_home\requirements.txt
最后,如果您在操作过程中,遇到下载进度慢的问题,您可参考 pip换源 这篇文章,而且,离线安装不仅仅在于克隆“古董级别”的环境,也可以是您在部署开源项目时,由于您的机器可能无法联网,您可以在别的地方下载之后,用于离线安装,只要从第二步开始执行就好。
以上就是离线安装的操作步骤,如有错误之处,欢迎您批评指正