场景描述
做一个假设,您的生产环境(或者说线上环境)是处于内网的主机,且不能出外网(也就是不能上网),但又需要安装Python的第三方库,怎么办?在本篇文章中,笔者拿安装Flask库(轻量级web框架)来讲解,经分析Flask本身还依赖了其他众多的库。依赖了有多少,依赖的是哪些,这些目前都是未知的。下面笔者把认为最快速、最方便、最优雅、最没那么遭罪的安装办法进行分享,希望可以做到抛砖引玉的效果,如果您有更好的安装方法,笔者非常希望您能来稿进行分享。
确认线上主机的Python版本
下面操作是为了确认线上主机的python版本
# python --version Python 2.7.5
比如笔者的是python2.7.5
接着在本地主机确认python版本
下面操作是在自己的本地测试机上进行
# 确认python版本 [root@host-for-dev soft-tmp]# python --version Python 2.7.5 [root@host-for-dev soft-tmp]# # 同时确认一下确实没有安装过flask [root@host-for-dev soft-tmp]# python Python 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import flask Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named flask >>>
运气非常好,刚好笔者本地的CentOS默认的Python也是2.7.5版本。如果不是,那么就需要编译安装一个和线上一样的版本了。
前戏结束!下面正式进入主题
下面的操作均在自己的本地测试机上进行哈
打开https://pypi.org/
搜索pip
查看以往的版本
需要找到支持python2.7的pip
下载源码包
按照同样的套路,下载setuptools的源码包
安装setuptools
unzip setuptools-44.1.1.zip python setup.py install
接着安装pip
cd pip-20.3.4 python setup.py install
验证pip是否安装成功
[root@host-for-dev ~]# pip -V pip 20.3.4 from /usr/lib/python2.7/site-packages/pip-20.3.4-py2.7.egg/pip (python 2.7) [root@host-for-dev ~]#
下载Flask的和与其有关的依赖,格式是whl格式
[root@host-for-dev soft-tmp]# mkdir flask-pak [root@host-for-dev soft-tmp]# cd flask-pak/ [root@host-for-dev flask-pak]# [root@host-for-dev flask-pak]# pip download Flask DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality. Collecting Flask Downloading Flask-1.1.4-py2.py3-none-any.whl (94 kB) |████████████████████████████████| 94 kB 216 kB/s Collecting click<8.0,>=5.1 Downloading click-7.1.2-py2.py3-none-any.whl (82 kB) |████████████████████████████████| 82 kB 237 kB/s Collecting Jinja2<3.0,>=2.10.1 Downloading Jinja2-2.11.3-py2.py3-none-any.whl (125 kB) |████████████████████████████████| 125 kB 171 kB/s Collecting Werkzeug<2.0,>=0.15 Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) |████████████████████████████████| 298 kB 54 kB/s Collecting itsdangerous<2.0,>=0.24 Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting MarkupSafe>=0.23 Downloading MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl (24 kB) Saved ./Flask-1.1.4-py2.py3-none-any.whl Saved ./click-7.1.2-py2.py3-none-any.whl Saved ./Jinja2-2.11.3-py2.py3-none-any.whl Saved ./Werkzeug-1.0.1-py2.py3-none-any.whl Saved ./itsdangerous-1.1.0-py2.py3-none-any.whl Saved ./MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl Successfully downloaded Flask click Jinja2 Werkzeug itsdangerous MarkupSafe [root@host-for-dev flask-pak]# ll total 640 -rw-r--r-- 1 root root 82780 Jun 24 21:33 click-7.1.2-py2.py3-none-any.whl -rw-r--r-- 1 root root 94591 Jun 24 21:33 Flask-1.1.4-py2.py3-none-any.whl -rw-r--r-- 1 root root 16743 Jun 24 21:33 itsdangerous-1.1.0-py2.py3-none-any.whl -rw-r--r-- 1 root root 125699 Jun 24 21:33 Jinja2-2.11.3-py2.py3-none-any.whl -rw-r--r-- 1 root root 24348 Jun 24 21:33 MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl -rw-r--r-- 1 root root 298631 Jun 24 21:33 Werkzeug-1.0.1-py2.py3-none-any.whl [root@host-for-dev flask-pak]#
关于Flask库的依赖到底有有哪些?答案很明显了,如下:
click-7.1.2-py2.py3-none-any.whl Flask-1.1.4-py2.py3-none-any.whl # 除了Flask本身,其它的whl格式的包,都是它所依赖的。 itsdangerous-1.1.0-py2.py3-none-any.whl Jinja2-2.11.3-py2.py3-none-any.whl MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl Werkzeug-1.0.1-py2.py3-none-any.whl
接着打包flask-pak目录
[root@host-for-dev soft-tmp]# tar -zcf flask-pak.tar.gz flask-pak/
自行将下面3个包上传到线上的主机(不可出外网的主机)
flask-pak.tar.gz pip-20.3.4.tar.gz setuptools-44.1.1.zip
上传到线上主机(不可出外网的主机)后,按照同样的套路安装好setuptools和pip,在此不再演示步骤。且到此为止,在本地测试主机的操作就此结束。
线上内网主机(不可出外网的主机)上开始安装Flask库
下面的操作请切换您的线上主机(不可出外网的主机)
接着解压flask-pak.tar.gz
[root@hngz3-YWGLXT-PRM-ser07 ~/soft_pak]# tar -zxf flask-pak.tar.gz [root@hngz3-YWGLXT-PRM-ser07 ~/soft_pak/flask-pak]# ll total 640 -rw-r--r-- 1 root root 82780 Jun 24 2022 click-7.1.2-py2.py3-none-any.whl -rw-r--r-- 1 root root 94591 Jun 24 2022 Flask-1.1.4-py2.py3-none-any.whl -rw-r--r-- 1 root root 16743 Jun 24 2022 itsdangerous-1.1.0-py2.py3-none-any.whl -rw-r--r-- 1 root root 125699 Jun 24 2022 Jinja2-2.11.3-py2.py3-none-any.whl -rw-r--r-- 1 root root 24348 Jun 24 2022 MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl -rw-r--r-- 1 root root 298631 Jun 24 2022 Werkzeug-1.0.1-py2.py3-none-any.whl
安装Flask
# 安装 pip install Werkzeug-1.0.1-py2.py3-none-any.whl pip install MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl pip install Jinja2-2.11.3-py2.py3-none-any.whl pip install itsdangerous-1.1.0-py2.py3-none-any.whl pip install click-7.1.2-py2.py3-none-any.whl pip install Flask-1.1.4-py2.py3-none-any.whl
注意安装顺序,先安装依赖,最后再安装Flask-1.1.4-py2.py3-none-any.whl
验证flask是否安装完成
进入python,导入flask看看是否能导入,导入成功说明安装成功
[root@hngz3-YWGLXT-PRM-ser07 ~/soft_pak/flask-pak]# python Python 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import flask >>> from flask import Flask, request
写在最后
好了!笔者已经把认为最快速、最方便、最优雅、最没那么遭罪的安装办法分享结束了。如果您认为不是最好的方法,欢迎来怼我,更欢迎您可以来稿,把您认为最好的安装方法分享出来,有稿费哦。好了,就此搁笔,望广大朋友能多多关注我们,望多多点赞、转发,非常感谢!