CentOS7.3 1611 pip离线安装python模块whl文件的陷阱
1、环境简述
本人目前的项目要求是为一台centos7.3的服务器增加一个可以邮件报警的脚本,服务器运行在内网中,脚本预警项目检测部分使用shell脚本实现,发送邮件部分使用python3实现,邮件使用内部邮件服务器,所以需要离线安装所有部分。
2、安装过程
1、源码包安装python3.7.9
安装依赖
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
编译安装
tar xf Python-3.7.9.tar.xz
cd /Python-3.7.9
./configure --prefix=/usr/bin/python3.7.9
make
make install
2、获取pypi模块依赖列表
由于发送邮件需要使用exchangelib-3.3.2模块实现,所以需要安装此模块及其依赖模块
在可连接外网的测试环境通过网络安装
外网环境安装
/usr/bin/python3.7.9/bin/pip3 install exchangelib-3.3.2
将安装过程保存下来,筛选出其中的包名称和安装顺序,我筛选出的顺序如下
pip-21.0.1-py3-none-any.whl
lxml-4.6.2-cp37-cp37m-manylinux1_x86_64.whl
urllib3-1.26.3-py2.py3-none-any.whl
idna-2.10-py2.py3-none-any.whl
chardet-4.0.0-py2.py3-none-any.whl
certifi-2020.12.5-py2.py3-none-any.whl
requests-2.25.1-py2.py3-none-any.whl
defusedxml-0.6.0-py2.py3-none-any.whl
Pygments-2.8.0-py3-none-any.whl
cached_property-1.5.2-py2.py3-none-any.whl
oauthlib-3.1.0-py2.py3-none-any.whl
tzdata-2021.1-py2.py3-none-any.whl
backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl
pycparser-2.20-py2.py3-none-any.whl
cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl
cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl
ntlm_auth-1.5.0-py2.py3-none-any.whl
requests_ntlm-1.1.0-py2.py3-none-any.whl
dnspython-2.1.0-py3-none-any.whl
requests_oauthlib-1.3.0-py2.py3-none-any.whl
pytz-2021.1-py2.py3-none-any.whl
tzlocal-2.1-py2.py3-none-any.whl
six-1.15.0-py2.py3-none-any.whl
isodate-0.6.0-py2.py3-none-any.whl
exchangelib-3.3.2-py2.py3-none-any.whl
3、获取pypi模块文件(*.whl)
按照上述列表,在==https://pypi.org/project/pip/==这个网站中可以搜索whl包名获取下载,演示如下
3.1、搜索栏输入包名加版本号
3.1.1、例如找exchangelib-3.3.2-py2.py3-none-any.whl
则搜索exchangelib-3.3.2
3.1.2、在搜索结果中选择包名和版本都对应的包
点击左侧 Download files 按钮,在列表中点击完全一致的包名,下载,保存即可
3.1.3、如果没有完全对应的,则选包名完全一致的
点击左侧 Release history 选择所需要的版本,然后点击左侧 Download files 按钮,在列表中点击完全一致的包名,下载,保存即可
4、安装whl文件
注意!坑来了
在Linux中,可能同时存在多个python版本,例如我的实际环境中同时存在python2.7.5版本、Python 3.6.8版本、和Python 3.7.9版本。
并且,每个版本的多个pip都是互相独立的(如图),所以,使用pip安装的时候必须找到真正对应的pip命令才能正确安装,并且使用对应的python命令执行,才能有正确的执行结果
错误执行 可能出现的异常报错包括:网络报错、版本不支持
我是使用此目录中的pip3安装的文件,python3执行的脚本,安装命令如下
/usr/bin/python3.7.9/bin/pip3 install pip-21.0.1-py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install lxml-4.6.2-cp37-cp37m-manylinux1_x86_64.whl
/usr/bin/python3.7.9/bin/pip3 install urllib3-1.26.3-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install idna-2.10-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install chardet-4.0.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install certifi-2020.12.5-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install requests-2.25.1-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install defusedxml-0.6.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install Pygments-2.8.0-py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install cached_property-1.5.2-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install oauthlib-3.1.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install tzdata-2021.1-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl
/usr/bin/python3.7.9/bin/pip3 install pycparser-2.20-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl
/usr/bin/python3.7.9/bin/pip3 install cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl
/usr/bin/python3.7.9/bin/pip3 install ntlm_auth-1.5.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install requests_ntlm-1.1.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install dnspython-2.1.0-py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install requests_oauthlib-1.3.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install pytz-2021.1-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install tzlocal-2.1-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install six-1.15.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install isodate-0.6.0-py2.py3-none-any.whl
/usr/bin/python3.7.9/bin/pip3 install exchangelib-3.3.2-py2.py3-none-any.whl
pip3已经安装模块的展示
[root@gsmcenter bin]# /usr/bin/python3.7.9/bin/pip3 list
Package Version
------------------ ---------
backports.zoneinfo 0.2.1
cached-property 1.5.2
certifi 2020.12.5
cffi 1.14.5
chardet 4.0.0
cryptography 3.4.6
defusedxml 0.6.0
dnspython 2.1.0
exchangelib 3.3.2
idna 2.10
isodate 0.6.0
lxml 4.6.2
ntlm-auth 1.5.0
oauthlib 3.1.0
pip 21.0.1
pycparser 2.20
Pygments 2.8.0
pytz 2021.1
requests 2.25.1
requests-ntlm 1.1.0
requests-oauthlib 1.3.0
setuptools 47.1.0
six 1.15.0
tzdata 2021.1
tzlocal 2.1
urllib3 1.26.3