想必大家在运维过程中,都涉及到需要部署python第三方库的场景,而在生产环境中没有外网,也就无法通过pip下载python库,需要通过离线安装的方式进行安装,而离线安装python库涉及到非常多版本的包,手动选择版本不对的话也会安装不上,并且第三方库也涉及到多个前置依赖库,一个个安装起来非常麻烦。所以我们可以在外网环境模拟一台机器,通过在线的方式下载部署第三方库,然后移植到生产环境中。
说明:外网主机和内网主机要保证主机架构一致、python环境版本一致。
1.移植全量python库(适用于新的python环境)
获取外网主机中所有的库清单,并下载所有库到本地
pip freeze > pythonpackage.txt
下载所有库到本地
pip download -d ./package -r pythonpackage.txt -i https://mirrors.aliyun.com/pypi/simple/
将该文件夹上传到离线主机中,并将pythonpackage.txt也上传到package文件夹中
离线安装第三方库
pip install --no-index --find-links=安装包路径 -r pythonpackage.txt
2.移植指定python库
在外网主机中下载pipdeptree,用于查看第三方库的依赖关系
pip install pipdeptree -i https://mirrors.aliyun.com/pypi/simple/
下载所需要的第三方库,以pandas为例
pip install pandas -i https://mirrors.aliyun.com/pypi/simple/
下载完成后查看pandas的库依赖关系
pipdeptree |grep -C5 pandas
可以看到pandas依赖numpy、python-dateutil、pytz三个库,而python-dateutil又依赖six库。此处如果使用pip show pandas来查看依赖关系,就没法看到多级依赖。
获取包版本信息
pip freeze|grep "pandas\|numpy\|python-dateutil\|pytz\|six" > pythonpackage.txt
下载所有库到本地
pip download -d ./package -r pythonpackage.txt -i https://mirrors.aliyun.com/pypi/simple/
将该文件夹上传到离线主机中,并将pythonpackage.txt也上传到package文件夹中
离线安装第三方库
pip install --no-index --find-links=安装包路径 -r pythonpackage.txt