场景描述

做一个假设,您的生产环境(或者说线上环境)是处于内网的主机,且不能出外网(也就是不能上网),但又需要安装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/

python install sc_python

搜索pip

python install sc_python install sc_02

查看以往的版本

python install sc_python install sc_03

需要找到支持python2.7的pip

python install sc_Python_04

python install sc_python install sc_05

下载源码包

python install sc_python_06

按照同样的套路,下载setuptools的源码包

python install sc_Python_07

安装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

写在最后

好了!笔者已经把认为最快速、最方便、最优雅、最没那么遭罪的安装办法分享结束了。如果您认为不是最好的方法,欢迎来怼我,更欢迎您可以来稿,把您认为最好的安装方法分享出来,有稿费哦。好了,就此搁笔,望广大朋友能多多关注我们,望多多点赞、转发,非常感谢!