【Web开发】Python实现Web服务器(Ubuntu下安装Flask)

news2024/11/13 12:32:23

在这里插入图片描述

🍺基于Python的Web服务器系列相关文章编写如下🍺:

  1. 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈
  2. 🎈【Web开发】Python实现Web服务器(Flask案例测试)🎈
  3. 🎈【Web开发】Python实现Web服务器(Flask部署上线)🎈
  4. 🎈【Web开发】Python实现Web服务器(Flask+Tornado+nginx)🎈
  5. 🎈【Web开发】Python实现Web服务器(Ubuntu下安装Flask)🎈
  6. 🎈【Web开发】Python实现Web服务器(Ubuntu下打包Flask)🎈

文章目录

  • 1、简介
  • 2、开发安装
    • 2.1 安装虚拟环境
    • 2.2 安装flask
    • 2.3 安装uwsgi
  • 3、代码测试
    • 3.1 测试一(python xxx.py)
    • 3.2 测试二(flask run)
    • 3.3 测试三(uwsgi)
    • 3.4 测试四(gunicorn)
  • 结语

1、简介

Flask是用于Python的免费开放源代码微型Web框架。Flask软件包包含在Ubuntu的官方存储库中,可以使用apt软件包管理器进行安装。 这是在Ubuntu 20.04上安装Flask的最简单方法。 当然,存储库中包含的版本可能会落后于Flask的最新版本。
在这里插入图片描述
Ubuntu 20.04 LTS 是目前 Ubuntu 系统的最新版本,也是非常受欢迎的 Linux 发行版。在 Ubuntu 20.04 LTS 上默认安装的是 Python 3.8 版本。

python
# or
python3

在这里插入图片描述

python -v
# or
python3 -v

在这里插入图片描述

whereis python

在这里插入图片描述

2、开发安装

在这里插入图片描述

2.1 安装虚拟环境

虚拟环境允许您为不同的Python项目创建隔离的环境。
通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本。

  • (1)virtualenv工具

在 python3.3 之前,只能通过 virtualenv 创建虚拟环境,首先需要安装 virtualenv

pip install virtualenv
或者
apt-get install virtualenv

在当前目录下创建一个名为 myvenv 的虚拟环境:

virtualenv --no-site-packages myvenv

# 在当前目录创建一个名为venv的虚拟环境
virtualenv venv
 
# 如果指定python版本
virtualenv -p /usr/bin/python3 venv

其他虚拟环境管理工具:
virtualenvwrapper:是对 virtualenv 的一个封装。
virtualenvwrapper-win:针对 Windows batch shell 的 virtualenvwrapper。
pyenv:用来解决这类问题。它可以安装、卸载、编译、管理多个 python 版本,并随时将其中一个设置为工作环境。
pyenv-win:针对 Windows 的 pyenv。

# 安装 - Linux
pip install virtualenvwrapper

# 安装 - Windows
pip install virtualenvwrapper-win
  • (2)venv 模块
    Python3.3 之后,可以用模块 venv 代替 virtualenv 工具,好处是不用单独安装,3.3 及之后的版本,都可以通过安装好的 Python 来创建虚拟环境:
python -m venv myvenv

创建虚拟环境的推荐方法是使用python3-venv软件包提供的venv模块。

sudo apt install python3-venv

在这里插入图片描述
为Flask应用程序创建一个新目录,然后切换到该目录:

mkdir flask_app && cd flask_app

在目录中运行以下命令以创建虚拟环境:

python3 -m venv venv

在这里插入图片描述
在这里插入图片描述
执行命令:

sudo apt-get install python3.8-venv

在这里插入图片描述
重新执行命令:

python3 -m venv venv

在这里插入图片描述
要开始使用虚拟环境,您需要使用activate脚本将其激活:
Linux 系统中,激活脚本路径是 /bin/activate,默认脚本没有执行权限,要么设置脚本为可执行,要么用 source 命令执行,例如source myvenv/bin/activate。

source venv/bin/activate

在这里插入图片描述
一旦激活,虚拟环境的bin目录将添加到 $PATH 变量的开头。
完成工作后,请键入deactivate停用环境,然后将返回到常规shell。

deactivate

2.2 安装flask

使用pip安装Flask:

pip install Flask

在这里插入图片描述
在这里插入图片描述
安装出错了。

pip install --upgrade pip setuptools

在这里插入图片描述

pip install markupsafe

在这里插入图片描述
然后重新执行命令,安装flask:

pip install flask

在这里插入图片描述
要验证安装,请运行以下命令,该命令将显示Flask版本:

python -m flask --version

在这里插入图片描述

pip list

在这里插入图片描述

2.3 安装uwsgi

uwsgi 安装报错 plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
温馨提示:小沐安装这个库有点费力,哈哈。

apt-get install python3.8-dev

在这里插入图片描述

sudo pip3 install uwsgi
# or
pip install uwsgi
# or 
python3.8 -m pip install uwsgi -i https://pypi.douban.com/simple

在这里插入图片描述

验证是否安装成功:

uwsgi --version

在这里插入图片描述

pip list

在这里插入图片描述
再写几句备注:
(1)如果还没有安装gcc,可以安装一个低版本的gcc:

sudo apt-get install gcc-4.8

(2)如果已经安装了gcc,查看一下gcc版本:gcc -v
(3)再查看一下当前版本:ls /usr/bin/gcc*
(4)接着设置4.8为优先使用的版本:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100

(5)建立软链接

#uwsgi: error while loading shared libraries: libpcre.so这个时候需要为其创建软链接
# 找到所有的系统中libpcre
find / -name libpcre.so.*
# 创建libpcre.so.1软链到/lib下   下面路径改为自己安装python的路径
sudo ln -s /home/tomcat/lib/libpcre.so.1 /lib

(6)uwsgi: command not found
pip install uwsgi 之后,运行uwsgi 报错:[uwsgi: command not found]
解决方案:建立软链接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

3、代码测试

在这里插入图片描述

3.1 测试一(python xxx.py)

  • hello.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World, 小沐!'
 
if __name__ == '__main__':
    app.run()

执行命令如下:

python hello.py

在这里插入图片描述

3.2 测试二(flask run)

  • hello2.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World, 小沐!'

执行命令如下:

export FLASK_APP=hello2.py
flask run

在这里插入图片描述

3.3 测试三(uwsgi)

使用uwsgi启动flask脚本。
在venv目录下新建一个uwsgi.ini配置文件,并配置。

# 新建文件
touch uwsgi.ini
 
# 写入内容
vi uwsgi.ini

uwsgi.ini的内容编辑如下:

[uwsgi]
# hello.py文件所在目录
chdir = /home/ubuntu/tomcat/flask_app
 
callable = app
 
# flask文件名
wsgi-file = hello.py
 
# 进程数
processes = 5
 
# 使用5001端口
http = 0.0.0.0:5001
 
# 日志输出目录
daemonize = /home/ubuntu/tomcat/flask_app/flask.log
 
pidfile = project-master.pid
 
master = true

网上另一份参数配置如下:

[uwsgi]
# 监听端口,使用Nginx代理时使用这个
socket = 127.0.0.1:8000
# 独立服务器运行时使用这个
# http = 0.0.0.0:8000
# 工作路径(你的项目根目录路径)
chdir = /www/myproject
# wsgi 路径,项目调用的主程序文件(不在项目根目录需要带上路径)
wsgi-file = myproject_run.py
# 项目内的python程序名称,flask的程序通常叫app,
callable = app
# 设置进程 processes 和 workers 一样的意思
# processes = 2
workers = 2
# 每个进程下面的线程数
threads = 4
# 以独立守护进程运行
master = True
# 允许在请求中开启新线程
enable-threads = True
# 存放uwsgi进程的pid,便于重启和关闭操作
pidfile = uwsgi.pid
# 日志文件
daemonize = uwsgi_server.log
# 返回一个json串,显示各进程和worker的状态
stats=127.0.0.1:9191
# 启用内存报告,报告占用的内存
memory-report=true
# 缓冲区大小,设置请求的最大大小
buffer-size = 65535

启动程序:

# 启动命令(在venv目录下)
uwsgi uwsgi.ini
 
# 查看进程是否启动成功
ps -ef | grep uwsgi

在这里插入图片描述
查看日志输出:

cat flask.log

在这里插入图片描述
在这里插入图片描述

#### 启动命令:
uwsgi --ini xxx.ini
uwsgi --http :8000 --wsgi-file uwsgi_test.py
#### 重启:
uwsgi --reload xxx.pid
#### 停止:
uwsgi --stop xxx.pid
uwsgi --stop project-master.pid
ps -ef | grep uwsgi

在这里插入图片描述

  • 部署流程是:
    (1)开发完成后,使用 pip freeze > requirements.txt 命令将项目的库依赖导出,作为代码的一部分
    (2)将代码上传到服务器
    (3)在服务器上创建一个虚拟环境
    (4)激活虚拟环境,执行 pip install -r requirements.txt,安装项目依赖
    在这里插入图片描述

3.4 测试四(gunicorn)

pip install gunicorn

在这里插入图片描述
如果您按照初始服务器设置指南进行操作,则应启用UFW防火墙。要测试应用程序,您需要允许访问端口5000:

sudo ufw allow 5000

在这里插入图片描述

  • myproject.py:
from flask import Flask
app = Flask(__name__)@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello World!</h1>"if __name__ == "__main__":
    app.run(host='0.0.0.0')
  • server.py:
from myproject import app
​
if __name__ == "__main__":
    app.run()
gunicorn --bind 0.0.0.0:5000 hello2:app

在这里插入图片描述

gunicorn -w 4 -b 0.0.0.0:8000 hello2:app

在这里插入图片描述
Gunicorn目前自带支持几种工作方式:sync (默认值) eventlet gevent tornado

gunicorn -w 4 demo:app --worker-class sync
gunicorn -w 4 demo:app --worker-class gevent
gunicorn -w 4 demo:app --worker-class tornado
gunicorn -w 4 demo:app --worker-class eventlet

Gunicorn对静态文件的支持不太好,所以生产环境下常用Nginx作为反向代理服务器。
生产环境都是Nginx + gunicorn + flask

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ESP32+freeRTOS学习笔记-(三)任务】

目录1、任务相关基本概念1.1 任务函数原型1.2 任务句柄TaskHandle_t 及任务控制块TCB_t1.3 任务状态1.4 优先级(Task Priorities)2 创建任务2.1 xTaskCreate2.2 xTaskCreateStatic()3 延迟函数使任务进入阻塞状态vTaskDelay()函数vTaskDelayUntil&#xff08;&#xff09;函数4…

【C++初阶】vector的模拟实现

文章目录vector的介绍vector的模拟实现成员变量Member functionsconstructor&#xff08;构造函数&#xff09;destructor&#xff08;析构函数&#xff09;operatorIteratorsbeginendCapacitysizecapacityreserveresizeElement accessoperator[]Modifierspush_backpop_backins…

手办商城系统|Springboot+vue+ElementUI手办商城系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

C语言重点解剖预处理要点速记

1.宏定义字符串的时候一定要带上双引号。 2.程序的翻译&#xff0c;就是把文本代码翻译成二进制代码。分为4个阶段&#xff0c;即预处理&#xff0c;编译&#xff0c;汇编&#xff0c;链接。 3.预处理&#xff1a;头文件展开&#xff0c;去注释&#xff0c;宏替换&#xff0c…

基于Spring cloud + vue 的前后端分离的社团管理系统,数据库采用MYSQL,前端使用 VUE + element

背景 因学校没有成熟的社团管理系统&#xff0c;一为满足学校需求&#xff0c; 其次开源的社团管理项目&#xff0c;多为mvc ssm框架 很少有前后端分离的微服务框架&#xff0c;为了科技的发展&#xff0c; 更好学习解决高并发问题&#xff0c;也为了更好地掌握锤炼新技术&…

Web前端:广州蓝景实训

0基础也能学&#xff0c;5个月的课程时间&#xff0c;从小白到就业课程内容紧贴市场就业要求。广州蓝景前端实训课程&#xff0c;6年时间培养出过千名工程师&#xff0c;成功就业。今天就跟大家分享&#xff0c;蓝景学员的学习体验流程&#xff1a; 一、前端技术学习 1、授课…

3.Kafka

1.定义 1.1传统定义 Kafka是一个分布式的基于发布订阅模式的消息队列&#xff0c;主要应用于大数据的实时处理领域发布订阅&#xff1a;消息发布者不会直接将消息发送给订阅者&#xff0c;而是将发布的消息分为不同的类别&#xff0c;订阅者只接收感兴趣的消息 1.2最新定义 …

计算机网络期末重点考点总复习

第三章数据链路层 CRC检验问题 知识点 例题 要发送的数据为1101011011。采用CRC的生成多项式是 P(X)X^4 X 1试求应添加在数据后面的余数。数据在传输过程中最后一个1变成了0&#xff0c;问接收端能否发现&#xff1f; 若数据在传输过程中最后两个1都变成了0&#xff0c;问接…

MacOS系统安装Qt教程

我以为搜索QT下载&#xff0c;安装好QT Creator就能开开心心HelloWorld&#xff0c;然而还是太年轻了&#xff0c;一个 No suitable kit found 报错告诉我&#xff0c;可能没那么简单。于是&#xff0c;我去查了查&#xff0c;大概原因就是苹果处理器和x86不太一样&#xff0c;…

借助这几个工具,轻松实现在手机压缩视频

我有一个习惯&#xff0c;就是会将生活中发生的趣事&#xff0c;或是沿途好看的风景&#xff0c;用手机录制下来&#xff0c;这样的话&#xff0c;后续再回看这些视频的时候&#xff0c;就能勾起相对应的美好回忆。 但是久而久之&#xff0c;这些视频积累太多的话&#xff0c;就…

Springboot 2.7.5 HikariCP 连接池多数据源配置

一. 引言 当前项目遇到需要连接多个数据库的场景&#xff0c;此时需要引入多数据源了. 还有一些诸如以下的场景: 与第三方对接时&#xff0c;有些合作方并不会为了你的某些需求而给你开发一个功能&#xff0c;他们可以提供给你一个可以访问数据源的只读账号&#xff0c;你需要…

Web漏洞扫描篇-Nessus使用

软件介绍 Nessus是一种漏洞扫描器&#xff0c;个人和组织广泛使用它来识别和修复计算机系统中的漏洞。Nessus可以扫描广泛的漏洞&#xff0c;包括缺少补丁、弱密码和配置错误的系统&#xff0c;它可以扫描单个系统或整个网络上的漏洞。Nessus可以在各种平台上运行&#xff0c;…

【云原生进阶之容器】第一章Docker核心技术1.10节——Docker网络模型设计

1 容器网络背景概述 1.1 Linux的namespace+cgroup 先来简要回顾一下前面的内容,namespace和cgroup是Linux 内核的两大特性,namespace的诞生据说就是为了支持容器技术,那么这俩特性到底干了啥呢? - namespace:linux支持多种类型的namespace,包括Network,IPC,PID, Mount…

基于HOG、LBP完成特征工程,基于SVM/RF/XGBOOST/GBDT/CNN/DNN完成人脸识别+表情识别

在我之前的文章中写过很多关于人脸识别和表情识别的文章&#xff0c;今天有一个项目的需求就是需要做两种或者是多种任务&#xff0c;我在开发完对应的模型之后就突然想到了之前做过的人脸识别和表情识别的项目&#xff0c;就想着是否可以基于机器学习/深度学习等方式来同时实现…

算法训练第五十七天 | LeetCode 647、516动态规划结尾

LeetCode 647回文子串 题目简析&#xff1a; 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 思路分析&#xff1a; 本题的难点 主要…

【Aptos与Sui智能合约】(Move长话短说) #03 - 智能合约编写与发布

前言:本篇学习如何在Aptos上发布两个自定义的智能合约 0x1 前置条件 安装好Aptos工具,MacOS、Ubuntu、Windows系统的预编译的安装包下载地址 https://github.com/aptos-labs/aptos-core/releases?q=cli&expanded=true 想自己从源码开始编译,你就下载Source Code 安装…

千万不要把Request传递到异步线程里面,有坑

前几天在网上冲浪的时候看到一篇技术文章&#xff0c;讲的是他把一个 request 请求传递到了线程池里面&#xff0c;然后遇到了一个匪夷所思的情况。 他写了这篇文章&#xff0c;把自己针对这个问题的探索过程分享了出来&#xff1a; 《springboot 中如何正确的在异步线程中使用…

艾美捷脂质过氧化检测试剂盒参数说明和文献参考

脂质过氧化的定量对于评估氧化损伤在病理生理学疾病中的作用至关重要。脂质过氧化导致饱和和不饱和脂质的高反应性和不稳定的氢过氧化物的形成。 艾美捷脂质过氧化检测试剂盒直接利用与亚铁离子的氧化还原反应测量过氧化氢&#xff0c;将脂质过氧化氢提取到氯仿中&#xff0c;提…

【python绘制地图——folium的方法和类的介绍(思维导图)】

Python使用folium制作地图并生成png图片 第一章 folium的方法和类的介绍&#xff08;思维导图&#xff09; 第二章 使用folium制作地图 第三章 folium实用功能进阶 第三章 使用Html2Image生成png图片 第四章 使用reportlab制作pdf报告 文章目录Python使用folium制作地图并生成…

轮廓图编程-自定义QChartView

目录 一、功能需求 二、实现效果 三、实现方法 一、功能需求 3D测量软件中&#xff0c;需要在轮廓上进行二次编程&#xff0c;需要显示轮廓线&#xff0c;然后可以调节矩形框的范围的获取参数&#xff0c;如华汉的HyperShape3D软件&#xff0c;对轮廓的编程界面如下。 二、实…