在 Ubuntu 18.04 LTS 上配置 Python 3、Flask 和 Gunicorn

Ubuntu Linux 最新的长期支持(LTS)操作系统版本为 18.04,于 2018 年 4 月发布。18.04 更新代号为“Bionic Beaver”,默认包含 Python 3。但是,您需要安装大量依赖项才能将此版本设置为开发环境。

在本教程中,我们将使用配置了开发系统包的 Python 3.6 来启动一个新的 Flask Web 应用程序项目并使用 Green Unicorn (Gunicorn) 运行它。

我们的工具

我们的项目将使用 Ubuntu 18.04 版本以及一些其他库。请注意,如果您使用的是较旧的 16.04 LTS 版本,还有一个指南将指导您将该版本设置为您的开发环境。

在逐步完成本教程的其余部分时,我们将安装以下工具:

  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Python version3.6.5(Ubuntu 18.04 默认)
  • Flask web framework version1.0.2
  • 绿独角兽(Gunicorn)版本19.8.1

如果您在 Mac OS X 或 Windows 上运行,请使用带有 Ubuntu .iso 文件的虚拟化软件,例如 Parallels 或 VirtualBox。 18.04 的 amd64 ori386 版本都可以。我在本教程中使用 amd64 进行开发和测试。

当您启动到 Ubuntu 桌面时,您应该会看到这样的屏幕。

我们已准备好配置开发环境。

系统包

打开终端窗口以继续设置。

使用下面两条命令查看安装的是哪个版本的Python 3

python3 --version
which python3

Python版本应为3.6.5,位置/usr/bin/python3

我们的 Ubuntu 安装需要一些系统包来进行开发,而不仅仅是运行 Python 脚本。运行以下 apt-get 命令并输入您的 sudo 密码以允许受限的系统访问。

sudo apt-get install python3-dev python3-pip python3-virtualenv

我们应该看到以下提示请求 sudo 访问权限。输入y让系统包管理器完成安装。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-4.15.0-20 linux-headers-4.15.0-20-generic
  linux-image-4.15.0-20-generic linux-modules-4.15.0-20-generic
  linux-modules-extra-4.15.0-20-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  dh-python libexpat1-dev libpython3-dev libpython3.6-dev python3-setuptools
  python3-wheel python3.6-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  dh-python libexpat1-dev libpython3-dev libpython3.6-dev python3-dev
  python3-pip python3-setuptools python3-virtualenv python3-wheel
  python3.6-dev
0 upgraded, 10 newly installed, 0 to remove and 11 not upgraded.
Need to get 3,617 kB/3,661 kB of archives.
After this operation, 20.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

包管理器会做脏活,并且应该在安装成功完成时报告。

(...clipped a bunch of installation lines for brevity...)
Unpacking python3-wheel (0.30.0-0.2) ...
Setting up python3-wheel (0.30.0-0.2) ...
Setting up python3-virtualenv (15.1.0+ds-1.1) ...
Setting up python3-pip (9.0.1-2.3~ubuntu1) ...
Setting up libexpat1-dev:amd64 (2.2.5-3) ...
Processing triggers for man-db (2.8.3-2) ...
Setting up python3-setuptools (39.0.1-2) ...
Setting up dh-python (3.20180325ubuntu2) ...
Setting up libpython3.6-dev:amd64 (3.6.5-3) ...
Setting up python3.6-dev (3.6.5-3) ...
Setting up libpython3-dev:amd64 (3.6.5-3) ...
Setting up python3-dev (3.6.5-3) ...

我们需要的包现在已经安装好了。我们可以继续安装特定于 Python 的依赖项。

虚拟环境

我们安装了 virtualenvand pip 来处理我们的应用程序依赖项。我们现在可以使用它们来下载和安装 Flask 和 Gunicorn。

创建一个目录来存储你的虚拟环境。然后在该目录中创建一个新的 virtualenv。

# make sure pip and setuptools are the latest version
pip3 install --upgrade pip setuptools
# the tilde ("~") specifies the user's home directory, such as "/home/matt"
cd ~
mkdir venvs
# specify the system python3 installation
python3 -m venv venvs/flask1804

激活虚拟环境。

source ~/venvs/flask1804/bin/activate

当virutalenv被激活时,我们的提示会改变。

我们的 virtualenv 现在已使用 Python 3 激活。我们可以安装我们需要的任何依赖项,例如 Flask 和 Gunicorn。

Flask 和 Gunicorn

我们将在新的 virtualenv 中使用 pip,但最好将其更新到最新版本。我们还应该安装 wheel 包以在 pip 尝试使用 Python wheels 时删除安装警告,Python wheels 是一长串公认的 Python 分发包模型中的最新标准。

pip install --upgrade pip
pip install wheel

我们现在可以通过 pip 命令安装 Flask 和 Green Unicorn。

pip install flask gunicorn

查找类似于以下内容的输出以确保库安装没有问题。

(flask1804) [email protected]:~$ pip install flask gunicorn
Collecting flask
  Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
Collecting gunicorn
  Using cached https://files.pythonhosted.org/packages/55/cb/09fe80bddf30be86abfc06ccb1154f97d6c64bb87111de066a5fc9ccb937/gunicorn-19.8.1-py2.py3-none-any.whl
Collecting click>=5.1 (from flask)
  Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting Werkzeug>=0.14 (from flask)
  Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
Collecting itsdangerous>=0.24 (from flask)
  Using cached https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz
Collecting Jinja2>=2.10 (from flask)
  Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
  Using cached https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous ... done
  Stored in directory: /home/matt/.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
  Running setup.py bdist_wheel for MarkupSafe ... done
  Stored in directory: /home/matt/.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
Successfully built itsdangerous MarkupSafe
Installing collected packages: click, Werkzeug, itsdangerous, MarkupSafe, Jinja2, flask, gunicorn
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 gunicorn-19.8.1 itsdangerous-0.24

在您的主目录下创建一个名为 flask1804 的新目录(不在 venvs 子目录中),它将存储我们的 Flask 测试项目。将目录更改为新目录文件夹。

mkdir ~/flask1804
cd ~/flask1804

在我们的 __init__.py 目录中创建一个名为 flaskproj 的新文件,以便我们进行测试以确保 Flask 正常工作。我通常使用 Vim,但 Emacs 和其他开发环境也能很好地工作。

__init__.py 中编写以下代码。

from flask import Flask, Response


app = Flask(__name__)

@app.route("/")
def index():
    return Response("It works!"), 200

if __name__ == "__main__":
    app.run(debug=True)

我们可以使用 python __init__.py 命令在 Flask 开发服务器上运行我们的应用程序。而是使用 Gunicorn 运行 Flask 应用程序。转到flask1804文件夹上面的目录,在我们的例子中我们可以输入cd ~然后使用gunicorn命令:

gunicorn flask1804.app:app

我们应该看到:

[2018-06-15 15:54:31 -0400] [5174] [INFO] Starting gunicorn 19.8.1
[2018-06-15 15:54:31 -0400] [5174] [INFO] Listening at: http://127.0.0.1:8000 (5174)
[2018-06-15 15:54:31 -0400] [5174] [INFO] Using worker: sync
[2018-06-15 15:54:31 -0400] [5177] [INFO] Booting worker with pid: 5177

太棒了,现在我们可以在网络浏览器中的 localhost:8000127.0.0.1:8000 地址启动我们的 shell Flask 应用程序。

现在您已准备好进行一些真正的 Flask 开发!

准备编码

这为开始使用 18.04 LTS 使用 Gunicorn WSGI 服务器开发 Flask 应用程序提供了快速配置。

接下来您应该查看以下使用此 Flask 配置的教程:

  • 使用 Python 和 Flask 响应 SMS 文本消息
  • 如何将托管监控添加到 Flask Web 应用程序)

或者,您还可以通过阅读完整堆栈 Python 目录页面来确定您的 Python 项目中接下来要编码的内容。

有问题吗?通过 Twitter@fullstackpython 或@mattmakai 与我联系。我也在 GitHub 上,用户名是 mattmakai。

这篇文章有问题吗?在 GitHub 上创建此页面的源代码并提交拉取请求。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏