部署方案¶
Python 版本繁多, Python 应用需要依赖一些包,版本也不尽相同。 如果在系统级 Python 环境部署应用,可以预想到,一定存在冲突风险。 试想一下场景:
应用 A 、 B 均依赖一个数据库连接包,版本分别是 a 和 b ,两个版本有些不兼容。 如果两个应用部署在同个 Python 环境,那么数据库包应该安装什么版本呢?
独立部署环境¶
问题只能通过部署独立的 Python 环境来解决。那么同台机器如何部署多个 Python 环境呢? 甚至是版本不同的 Python 环境?—— virtualenv !
首先,初始化一个新的 Python 环境:
$ virtualenv ~/python
New python executable in /Users/fasion/python/bin/python
Installing setuptools, pip, wheel...done.
完成之后,便可启动 Python 解析器了:
$ ~/python/bin/python
Python 3.6.4 (default, Jan 6 2018, 11:51:59)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('abc')
abc
>>>
自然也可以用这个独立的环境来跑应用了:
$ ~/python/bin/python /some/path/to/app.py
当然了,也可以指定 Python 版本:
$ virtualenv -p python3 ~/python3
Tip
用 virtualenv 制作独立的 Python 环境,对其任何操作均不影响其他环境。
依赖管理¶
Python 通过 pip 命令安装依赖包,大家应该都知道:
$ pip install Flask
依赖包版本也很重要,用了错误版本的包可能导致应用异常。保险起见,装包时指定版本:
$ pip install Flask==1.0.2
每次部署应用时,检查所有依赖包及版本是否就绪。 方法非常简单,直接运行装包命令即可。 pip 将确保依赖包以指定版本安装。
此外,最好可以通过配置文件将所有依赖保存下来。 pip 命令也支持依赖配置文件 requirements.txt ,内容格式如下:
Flask==1.0.2
Jinja2==2.10
这样一来,一个命令就可以完成所有依赖包的安装:
$ pip install -r requirements.txt
Tip
应用在 requirements.txt 配置文件维护所有依赖包及版本并通过 pip 命令安装。