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部署

18 回复

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

这个应该比较简单吧,开发环境靠 app.run()运行,而且 gunicorn 配置是很容易的了,写一个 shell 脚本,把你的 Application 复制过去,运行一下脚本就 ok 了

难道 Windows 上开发和 Linux 上部署冲突?我反正是没遇到。

https://realpython.com/kickstarting-flask-on-ubuntu-setup-and-deployment/

看下这个,用 supervisor 守护 gunicorn 启动的 flask app

开发和部署用不同的命令启动服务器不就好了,在本地 python server.py 没必要在服务器上也一定是 python server.py 呀。

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 友的热心帮助,我目前参照 的方法进行尝试,加上有现成代码可供参考,谢谢大伙

回到顶部