Python中如何基于Flask开发API服务,并在Windows10环境下开发,使用gunicorn在Linux部署
各位 v 友,入门 python 不久,目前习惯使用 windows 环境开发项目,团队同事大多数也是。现有个项目打算用 flask 实现并运行 api 服务提供给外部应用调用,查看资料发现,flask 自带的 wsgi 不推荐生产环境使用,官方推荐使用其他的 wsgi 服务器进行部署(如 gunicorn )。 现在想实现在 windows 下开发,可以使用 flask 默认 wsgi,生产环境可以用 gunicorn 运行。(要求:两种环境代码放在同个项目里),请问有什么方法可以实现?
Python中如何基于Flask开发API服务,并在Windows10环境下开发,使用gunicorn在Linux部署
if name == ‘main’:
app.run()
基于Flask开发API服务,在Windows 10上开发,然后用gunicorn在Linux部署,这个流程很常见。下面我直接给你一个完整的例子。
1. 项目结构
先创建一个简单的项目目录,比如my_flask_api,里面放这些文件:
my_flask_api/
├── app.py # 主应用文件
├── requirements.txt # 依赖包列表
└── wsgi.py # 部署用的WSGI入口
2. 编写Flask应用 (app.py)
from flask import Flask, jsonify, request
app = Flask(__name__)
# 示例:一个简单的用户数据存储(实际项目请用数据库)
users = [
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"}
]
@app.route('/')
def home():
return jsonify({"message": "Flask API is running!"})
@app.route('/api/users', methods=['GET'])
def get_users():
"""获取所有用户"""
return jsonify({"users": users})
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
"""根据ID获取单个用户"""
user = next((u for u in users if u['id'] == user_id), None)
if user:
return jsonify(user)
return jsonify({"error": "User not found"}), 404
@app.route('/api/users', methods=['POST'])
def create_user():
"""创建新用户"""
data = request.get_json()
if not data or 'name' not in data or 'email' not in data:
return jsonify({"error": "Missing name or email"}), 400
new_id = max(u['id'] for u in users) + 1 if users else 1
new_user = {
"id": new_id,
"name": data['name'],
"email": data['email']
}
users.append(new_user)
return jsonify(new_user), 201
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
3. 创建WSGI入口文件 (wsgi.py)
from app import app
if __name__ == "__main__":
app.run()
4. 依赖文件 (requirements.txt)
Flask==2.3.3
gunicorn==20.1.0
5. 开发阶段 (Windows 10) 在项目目录下打开命令行:
# 创建虚拟环境(可选但推荐)
python -m venv venv
venv\Scripts\activate # 激活虚拟环境
# 安装依赖
pip install -r requirements.txt
# 运行开发服务器
python app.py
现在访问 http://localhost:5000/ 就能看到API运行了。
6. 部署到Linux 把整个项目文件夹传到Linux服务器(比如用scp或git)。
在Linux服务器上:
# 1. 安装Python和虚拟环境(如果还没装)
sudo apt update
sudo apt install python3 python3-pip python3-venv
# 2. 进入项目目录
cd /path/to/my_flask_api
# 3. 创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 4. 用gunicorn启动服务
gunicorn --workers 4 --bind 0.0.0.0:8000 wsgi:app
这里--workers 4表示用4个工作进程,--bind 0.0.0.0:8000表示绑定所有IP的8000端口,wsgi:app告诉gunicorn从wsgi.py文件导入app对象。
7. 生产环境建议 实际部署时,你可能会用systemd或supervisor来管理gunicorn进程,用nginx做反向代理。但按你要求,这些就不展开了。
总结建议: 开发用Flask自带的服务器,部署用gunicorn加反向代理。
app.run 官方不推荐了,推荐 flask cli
开发环境:<br># 环境变量<br>FLASK_ENV=development<br>FLASK_APP=myapp:app<br><br>flask run<br>
win10 1903 有个 WSL2 的 linux 环境 windows 开发完直接在 wsl2 进行部署调试
你好,请问有相关推文吗,谢谢
docker for windows
用不用 docker 用上 docker 不用 上 wsl
暂时没用 docker
难道 Windows 上开发和 Linux 上部署冲突?我反正是没遇到。
https://realpython.com/kickstarting-flask-on-ubuntu-setup-and-deployment/
看下这个,用 supervisor 守护 gunicorn 启动的 flask app
http://helloflask.com/ 这个应该可以帮助到你
supervisor+nginx+gunicorn+flask
建个脚本跑一下就可以了 gunicorn -w 4 -b 127.0.0.1:8000 run:appx
本机上开发环境直接 app.run(), 部署时用 gunicorn 跑呗. 可以大致参考下这个项目的做法 https://github.com/open-falcon/dashboard
pycharm 有很方便的远程调试功能。
用 docker,去官方仓库能搜到别人写好的 image 来参考 /直接用,把代码挂载出来。
不用 docker 的话,systemd 来管理 gunicorn 也很方便。
总归是 pycharm 的方便,一键同步最方便。
谢谢各位 v 友的热心帮助,我目前参照 的方法进行尝试,加上有现成代码可供参考,谢谢大伙


