# 环境:python3.9.2,flask1.1.2,uswgi2.0.19.1,nginx1.19.8,Werkzeug 1.0.1,Jinja2-2.11.3 # 操作系统:centos7 # 编译安装python3.9.2环境 下载python3.9.2稳定版本,下载地址 https://www.python.org/downloads/source/
yum -y install make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf patch yum -y install wget crontabs libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel yum -y install libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel unzip tar bzip2 bzip2-devel libzip-devel yum -y install libevent libevent-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel yum -y install krb5 krb5-devel libidn libidn-devel openssl openssl-devel pcre-devel gettext gettext-devel ncurses-devel yum -y install gmp-devel pspell-devel unzip libcap diffutils ca-certificates net-tools libc-client-devel psmisc libXpm-devel yum -y install git-core c-ares-devel libicu-devel libxslt libxslt-devel xz expat-devel libaio-devel rpcgen libtirpc-devel yum -y install perl python-devel cyrus-sasl-devel sqlite-devel oniguruma-devel lsof re2c yum install libffi-devel -y tar -xvf Python-3.9.2.tar.xz cd Python-3.9.2 ./configure make make install
注:python3.9安装完成后自动安装了虚拟机环境和pip,命令是venv和pip
# 新建虚拟机并搭建flask
python3 -m venv /home/python_object/venv-flask cd /home/python_object/venv-flask source ./bin/activate pip install Flask
执行完上述命令后会在/home/python_object/目录下新建虚拟机环境venv-flask,该虚拟环境目录中有bin,include,lib文件。 source ./bin/activate命令用于激活虚拟环境,pip install Flask命令安装Flask,如果其实提示升级pip直接升级就好, 这样flask就安装在venv-flask这个虚拟环境中了,如果需要安装其它的版本的flask只要再新建虚拟机在新的虚拟机中安装需要的版本即可。 venv 模块支持使用自己的站点目录创建轻量级“虚拟环境”,可选择与系统站点目录隔离。 每个虚拟环境都有自己的 Python 二进制文件(与用于创建此环境的二进制文件的版本相匹配), 并且可以在其站点目录中拥有自己独立的已安装 Python 软件包集
# 虚拟环境中写一个超级简单的flask应用
venv-flask目录下新建www目录,并将hello.py方在该目录下 hello.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello,World!'
# 虚拟环境中安装uwsgi
pip install uwsgi
# 编写uswgi配置文件 uwsgi.ini
[uwsgi] # uWSGI 的监听端口 socket = 127.0.0.1:5555 # 项目根目录 chdir = /home/python_object/venv-flask/www # Flask 项目的启动文件 wsgi-file = hello.py # 程序内启用的application变量名 callable = app # 进程数量 processes = 4 vacuum = true master = true # 保存主进程pid文件 pidfile = /home/python_object/venv-flask/www/uwsgi.pid # 修改flask代码后自动重启uswgi py-autoreload = 1 # uswgi服务器运行日志,现在是与uswgi.ini同级目录 logto = log.txt
# 通过uwsgi启动flask应用
uwsgi --ini uwsgi.ini &
# nginx配置
server { listen 5050; server_name 127.0.0.1; charset utf-8; client_max_body_size 75M; location / { include uwsgi_params; # 导入uwsgi配置 uwsgi_pass 127.0.0.1:5555; # 转发端口,需要和uwsgi配置当中的监听端口一致 uwsgi_param UWSGI_PYTHON /home/python_object/venv-flask/bin; # Python解释器所在的路径,如果有虚拟环境可将路径设置为虚拟环境 uwsgi_param UWSGI_CHDIR /home/python_object/venv-flask/www; # 项目根目录 uwsgi_param UWSGI_SCRIPT run:app; # 项目的主程序,比如你测试用run.py文件,文件中app = Flask(__name__),那么这里就填run:app } }
重启nginx,执行 curl 127.0.0.1 命令后即可看到 Hello,World
# 手动启动和停止uwsgi
启动:uwsgi --ini uwsgi.ini 重启:uwsgi --reload uwsgi.pid 停止:uwsgi --stop uwsgi.pid
(完)