1、背景
在一些情况下,服务器不能连网,安装python的各种依赖包变得比较麻烦。本文旨在用一种相对简单的方法完成快速安装。whl是编译的二进制文件,通过whl安装可以减少系统对底层的一些缺包的依赖。
2、方法
(1)首先要弄清楚不能上网的服务器的安装pyton的版本,服务器允许的版本后缀;
a、import pip;print(pip.pep425tags.get_supported())
[('cp36', 'cp36m', 'manylinux1_x86_64'), ('cp36', 'cp36m', 'linux_x86_64'), ('cp36', 'abi3', 'manylinux1_x86_64'), ('cp36', 'abi3', 'linux_x86_64'), ('cp36', 'none', 'manylinux1_x86_64'), ('cp36', 'none', 'linux_x86_64'), ('cp35', 'abi3', 'manylinux1_x86_64'), ('cp35', 'abi3', 'linux_x86_64'), ('cp34', 'abi3', 'manylinux1_x86_64'), ('cp34', 'abi3', 'linux_x86_64'), ('cp33', 'abi3', 'manylinux1_x86_64'), ('cp33', 'abi3', 'linux_x86_64'), ('cp32', 'abi3', 'manylinux1_x86_64'), ('cp32', 'abi3', 'linux_x86_64'), ('py3', 'none', 'manylinux1_x86_64'), ('py3', 'none', 'linux_x86_64'), ('cp36', 'none', 'any'), ('cp3', 'none', 'any'), ('py36', 'none', 'any'), ('py3', 'none', 'any'), ('py35', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]
b、通过pip debug --verbose
获取兼容的版本号,为后续获取对应的whl文件做准备。
(2)在一个能上网的环境下,首先安装跟服务器版本一致的python环境,比如服务器安装的是3.6.5,在能上网的电脑上也安装一个同样版本3.6.5的python环境。
参考linux安装python3.6.5_ming5641的博客-CSDN博客
做好相关的pip的升级
python3.6 -m pip install --upgrade pip
接下来以安装xgboost为例进行说明:在连网的机器上
sudo /usr/bin/python36/bin/python3.6 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost
会进入自动安装,一直等待安装完毕后,获取相对应的版本号以及依赖关系:第一可通过 python3.6 -m pip show xgboost,查看依赖了哪些包名,继而通过pip list查看对应的包的版本号;第二可通过pipdeptree -p xgboost获取带有版本号的依赖树。
(3)通过(2)拿到了对应的版本号,可制作成requirement.txt, 根据对应的版本号,结合(1)获取的后缀名,到Simple Index 快照里获取服务器匹配的whl或tar.gz文件
(4)将下载的whl文件和requierment.txt一起打包,上传到服务器,通过
python3.6 -m pip install -r requirement.txt --no-index --find-links=whl文件所在路径,就可以快速完成安装
3、总结
我们核心的问题是要获取到对应的编号和兼容匹配的版本,通过上网的机器模拟安装来获取依赖关系及版本号,下载适合服务器要求后缀的whl,就可以快速完成安装。过程碰到问题可根据实际情况进行相应的解决