问题背景
在互联网情况下,我们安装一个模块还是比较方便的,指定好国内的镜像源即可快速的安装了。但是如果是在纯内网的环境,并且模块较多的情况,一个一个去离线下载安装,在这个过程中发现缺失的依赖,再去处理,未免太过麻烦,所以今天来看看如何解决此类问题。
freeze和pipreqs
其实不管是别人写的脚本,还是我们自己写的脚本,关于上面模块安装和依赖的这个问题都是有办法解决的,操作如下:
先在相同版本的互联网服务器上在线安装好所有的模块,并且保证脚本能正常运行
方案一
# 使用 freeze 命令,导出全部的依赖模块
pip3 freeze > requirements.txt
freeze 是有局限性的,命令只会生成通过pip install 安装的包,所以如果你不是通过这个方式安装的模块,那么很可能只会生成一个 requirements.txt 文件,而没有离线包
方案二
# 使用 pipreqs 命令,导出所需依赖
pipreqs ./ --force
下载模块和依赖
上面的方案操作后,只是生成了依赖文件,还需要根据依赖文件下载各模块
pip3 download -r requirements.txt -d packages -i https://pypi.tuna.tsinghua.edu.cn/simple
其实 freeze 的方式,如果没有导出离线包,但是生成了 requirements.txt 也是可以通过 download 来下载模块的
目的机器
把脚本和模块目录传输到对应的目的机器,执行以下脚本导入模块
pip3 install --no-index --find-links=./ -r ./requirements.txt
PS. 注意事项
- 选择相同python否则导出的依赖包版本可能不一致
- 选择干净的python环境,不同模块依赖的软件版本不同,可能出现版本不兼容的情况
- 选择相同的操作系统版本,有些模块对系统库有依赖,比如glibc库,可能出现不兼容的情况
- pip3 freeze 会导出全局所有的模块,可能会导出很多的无关模块,可以优先试试 pipreqs
评论