目录标题

  • 写在前面
  • 导出需下载的模块包清单
  • Python模块批下载方法
  • Python模块批安装方法


写在前面

实验室有一台不联网的大型机,因此只能利用离线安装包来装python. 但这着实令人有点犯难,几百个安装模块如果一个个的手动下载那滋味简直不要太爽。事实上,第一次还真的是这么干的…然而模块更新了…它竟然又又又更新了,鉴于目前模块更新的比重较大,且确实有用,我决心对大型机上的模块包做一次全面的升级。但这次是绝不能再采用手点的办法了(哭笑脸).2019.09.07对程序做了一些修正。

导出需下载的模块包清单

那问题来了,第一步就挺犯难的,该怎样获取需要安装的模块及其版本呢?
我的想法是这样的,需要离线安装python的人,一般而言都有至少一台可以联网的电脑,此外常用python的人可能会在这台联网的电脑上安装python,用于调试或解决不明错误。这样,直接把这台电脑上已安装的所有模块极其版本号导出就可以了。当然了,最好要确保该电脑上已安装的模块是最新版本。批量更新模块的程序如下:

  1. 更换镜像源
# 将pip下载路径更改为清华镜像源(相比于国外网站网速更快)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  1. 导出模块清单
# 第一种 导出所有第三方模块清单
pip freeze > requirements.txt

# 第二种 仅导出当前依赖项目的模块清单
python -m pip install pipreqs
pipreqs ./ --encoding=utf-8 --force
  1. 对清单中的模块进行批量更新
from pip._internal.utils.misc import get_installed_distributions
from subprocess import call
for dist in get_installed_distributions():
    call("pip install --upgrade --default-timeout=10000 --force " + dist.project_name, shell=True)
  1. 重新导出更新后的模块清单(步骤2)

Python模块批下载方法

# wheel下载与download下载相结合
python -m pip --default-timeout=100 download  -d dirpath -r requirements.txt
python -m pip --default-timeout=100 wheel -r requirements.txt

注:其中dirpath为自定义的模块保存路径。default-timeout是为了防止网速不稳定所引起的断点不续传问题。

Python模块批安装方法

将所需的模块包都下载完成后,即可利用以下代码进行自动安装。

# 自动安装模块包
python -m pip install --no-index --find-links=dirpath -r requirements.txt

2019-09-05