win7 离线安装 pip 包

环境:

  • win7
  • 无网络

适用环境是啥稍微猜一下都能猜到。当然还需要一台有网络的外网机,环境是任意版本 windows,推荐 windows 10/11。

(可选)安装 conda

具体来说,是下载 pip 包的外网机安装 miniconda;无网络的内网机安装 anaconda。因为内网机是 windows 7,python 只能支持到 python 3.8.9,外网机装一个 conda 可以方便的新建一个 python 版本为 3.8.9 的虚拟环境;而 anaconda 自带了很多包,装在内网机里面,可能有些包就不用离线安装了。

另外 anaconda 和 miniconda 若是装在 win7 上,同样需要遵守内置 python 版本不大于 3.8.9 的规定(否则安装时报错),对于 anaconda,可以通过查询其对应版本自带 python 包的发布时间,反推对应版本的 anaconda 安装包的发布时间:

低于 3.8.9 的最高版本是一年三个月前的 python 3.8.8。

那么下载 2021.4 的 anaconda 就不会有问题。

(可选)外网机新建虚拟环境

安装好 anaconda 后,先初始化,否则后续创建虚拟环境后 pip 仍会下载/安装到全局环境中:

1
2
3
4
conda init
#powershell 下初始化,还需要关闭 powershell 策略限制
#Set-ExecutionPolicy Bypass
#conda init powershell

新建虚拟环境(python 版本号是必填项,就算外网机子下的是 python 版本为 3.8.8 的 miniconda,此处不指定 python 版本后续 pip 也会下载/安装到全局环境中。

1
conda create -n pywin7 python=3.8.8

当然,用 conda 默认环境然后用 cmd 获取 conda pip 全路径然后后续用这个 pip 去下载/安装也能正确安装到 conda 中:

1
2
3
4
5
6
7
where pip

#cmd 中显示
C:\Users\zbttl\miniconda3\Scripts\pip.exe
C:\Python39\Scripts\pip.exe
#后续运行
C:\Users\zbttl\miniconda3\Scripts\pip.exe download xxx

但是吧。。。。这样我为什么不用纯 python 呢?(不过绝对路径的 pip 用 pip list 起来和正正经经激活 conda 环境出来的 pip list 结果上还是有一点不一样,感兴趣的朋友们可以自己试一试。

激活:

1
pip activate pywin7

外网机下载 pip 包

参考文章:

1
pip download xxx  -i https://pypi.mirrors.ustc.edu.cn/simple/

下载后打包拷走到内网机。

内网机安装 pip 包

1
pip install --no-index  --no-build-isolation --find-links=.\  xxx

关于 –no-build-isolation 这个参数,参见Install with –no-index no longer works · Issue #5696 · pypa/pip

(可选)直接拷贝整个虚拟环境

参考文章:Anaconda离线创建python环境_FY_2018的博客-CSDN博客_anaconda离线创建环境

如果要装的包比较多,建议直接整个虚拟环境拷到内网机器并安装(上面两步就可以不做了)。

查看当前虚拟环境所在目录:

1
conda env list

然后将相应目录打包。

另外还需要拷贝一个 pkgs 目录,在 conda 安装目录下。

来到内网机器,将 pkgs 覆盖到内网机器的 conda 目录下,而虚拟环境目录解压到任意文件夹下,假设解压到的文件夹名为 pywin7,则

1
conda create -n py38 --clone ./pywin7 --offline

即可。

不过这种方法会引入很多不必要的包。如果外网机是 miniconda 还好,外网机是 win10 anaconda 的情况下慎用。

另外「外网机下载 pip 包」参考文章中还写了一种方法,是用 pip freeze,但我觉得和 pip install 离线安装方法相比没什么优势,还要多处理一个安装配置文档,除非 pip install 离线安装时报错就可以试一下那个方法。