因为鱼类辨识系统会使用到 Python 来进行训练跟预测,而这些功能都是会在後端完成,为了考虑与後端的 YOLO 的整合,所以选择一个後端的 Python 开发框架,因为所需要的功能并不复杂,Flask 与 Django 都是可以参考的对象後来考虑这项专案对於後端的需求如下:
基於以上考量,後来选择使用 Django 这个网站框架,Django 使用 Python 语言编写,是一个广受欢迎、且功能完整的服务器端网站框架。接下来将逐步完成 Django 的安装跟配置。
Django 是依附在 Python 之下,所以并不限定作业系统,不管是 Linux, Mac OS, 或是 Windows,而 Python 2 或 Python 3 都可以安装,但是 Python 2.7 不能与 Django 2.0 一起使用,Django 1.11.x 系列是最後一个支持 Python 2.7 的系列。
在资料库的支援下,Django 支持四个主要数据库:PostgreSQL,MySQL,Oracle 和 SQLite,Django 默认配置为使用 SQLite。但这些限制并不是强迫的限制,毕竟它是基於於 Python 所建立的框架,所以还是有弹性的,可以为其他的 SQL 和 NOSQL 数据库,提供不同级别的支持。
有三个管道可以取得 Django:
因为这个专案的主机是来自aws是先安装好的ami镜像档,所以需要先确认的试镜像中的 Python 版本,此外在安装上强烈建议使用虚拟环境安装,这样有助於将来专案的移植。
先检查 python 与 pip 的版本,因为考虑专案的相容性,预设都会安装多个 Python 版本,登录 ec2 主机,输入以下指令确认目前主机(AWS Deep Learning AMI (Amazon Linux 2) version:49)内的 Python 安装情形
python -V
python3 -V
pip -V
pip3 -V
由下图检视执行结果可以发现 EC2 主机安装了两个不同版本的 Python,而安装工具 pip/pip3 也分别对应到不同的版本的 Python,而我们需要的是将 Django 安装在 python3 的环境下,本次专案会专门创建一个虚拟环境来安装 Django 以及後续所需要的套件。
图 1、检视 AWS EC2 的 python 安装情形
虚拟环境搭建是在 PEP 405 中制定,这个 PEP 提议向 Python 添加一种轻量级「虚拟环境」 机制,该环境具有自己的站点目录,可以选择与系统站点目录隔离。每个虚拟环境都有自己的 Python 二进制文件,允许使用各种 Python 版本创建环境,并且可以在其站点目录中有自己独立的已安装 Python 套件,但是与已安装的 Python 基础共享标准库。
虚拟环境是个观念,而实现这个观念的工具在 Python 2 是 virtualenv,Python 3 是 venv,它允许我们创建独立的 Python 环境。
使用虚拟环境可以为我们的 Python 应用程序创建隔离环境,并允许在该隔离环境中安装 Python 套件,而不是全局安装它们。归纳当然使用虚拟环境有几个优点:
如果使用的是Python 3.3 或更高版本,venv 模块是创建和管理虚拟环境的首选方式,并已经内建在套件中,所以可以不用再安装,而目前ec2内的python版本是3.7,所以可以不用安装虚拟环境套件,透过以下指令我们逐步创建虚拟环境 fishRecognition ,激活并进入虚拟环境,更新虚拟环境中的pip3安装工具,安装django,检视安装路径,最後再透过deactivate离开虚拟环境。透过检视虚拟环境的动作,下图显示操作结果。我们可以发现,所谓虚拟环境就是会把所需要的套件都安装在指定目录下。
python3 -m venv fishRecognition
source fishRecognition/bin/activate
python3 -m pip install --upgrade pip
pip3 install django
ls -la /home/ec2-user/fishRecognition/lib64/python3.7/site-packages/
deactivate
图 2、建立虚拟环境并安装 Django
为了让每次登录ec2都能自动激活fishRecognition的虚拟环境,所以修改 .bashrc ,在命令列输入以下指令。
cd
vi .bashrc
在 vi 编辑器中,在档案後面新增以下指令叙述,完成後存档离开,如下图所示,下次登录後就会自动激活虚拟环境。
# fishRecognition initialize
. /home/ec2-user/fishRecognition/bin/activate
图 3、修改 .bashrc 设定档,自动进入 Python 虚拟环境
接下来执行 Django,首先先建立一个专案,输入下述指令,但先不要执行该专案,要先修改一些设定。
# 进入虚拟环境目录
cd ~/fishRecognition
# 建立一个 Django 专案 fishsite
django-admin startproject fishsite
# 进入专案目录
cd fishsite
下图显示专案所生成的档案结构,可以看出Django专案除了会建立一个与专案名称相同的目录名称 fishsite 外,也会在该目录下再生成一个相同名称 fishsite 的预设模块,而这个末目录下有一个 settings.py 的档案,是 Django 的配置档案。
图 4、Django 专案的档案结构
不要立即启动 Django 的 Web 服务器,因为它会执行很多预设的初始化动作,比方说资料库的初始化,而 Django 预设的资料库是 SQLite,这会导致一些版本不相容的错误讯息,先编辑 settings.py 档,将资料库设定,允许外部连线设定以及语系和时区修改一下
settings.py
# 允许任何主机从外部连线设定
# DEBUG = True
DEBUG = False
# ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
# 资料库设定,注解预设资料库
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
}
# 将预设英语语系与时区修改成繁体中文与台北时区
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hant'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Taipei'
因为 Django Web 服务器预设的埠号是 8000,所以需要开放 AWS EC2 的安全群组 (Security group)。进入 EC2 的管理控制台,点击左手边的 执行个体 後,选择本专案的 EC2 个体,下方会出现执行个体的详细资讯,选取 安全性 页签,就可以看到目前所配置的安全群组,如下图所示。
图 5、AWS EC2 控制台中的安全群组标签
进入安全群组设定画面後,新增一个传入规则,类型为 自订TCP ,连接埠范围指定为 8000,来源指定为 Anywhere-IPv4 ,确认後点击 储存规则就可以,如下图所示。
图 6、新增安全群组的传入规则
这时候就可以启动 Django Web 服务器,请确认在 /home/ec2-user/fishRecognition/fishsite 这个目录下执行下列的指令。
python3 manage.py runserver 0.0.0.0:8000
执行成功应该会看到以下的画面,会显示 Starting development server at http://0.0.0.0:8000 这个讯息。
图 7、启动 Django Web 服务器
接着打开浏览器输入 http:[EC2_IPv4]:8000/admin/,[EC2_IPv4]指的是EC2的公有 IPv4 地址。就会出现要求登入的画面,如下图所示,这表示Django Web 服务器已经成功启动,并可以被浏览器存取到。
图 8、Django 的登录画面
参考资料
<<: Day 04:金鱼记忆力太短暂,交给外挂记吧!autosuggestions 与 substring-search
前言 在上一章节中,笔者讲解了如和切换使用者以及取得最高的root使用者权限,接下来要讲解的是本地端...
https://www.youtube.com/watch?v=ozhe__GdWC8&ab...
Day 11 - Kotlin的函式(2) 昨天我们讲了list集合,以及如何取得数值,今天我们要继...
前几天我们建立起 Gitlab, 并将它串接到 Jenkins, 今天将继续部署基础设施, 我们将使...
Introduction to Machine Learning Ture and False D...