当前位置: 首页 > news >正文

Python Web项目打包(Wheel)与服务器部署全流程

目录

        • 一、本地开发环境准备
        • 二、创建`setup.py`打包配置
        • 三、创建WSGI入口文件
        • 四、打包生成Wheel文件
        • 五、服务器端部署流程
          • 1. 传输文件到服务器
          • 2. 服务器环境准备
          • 3. 配置生产环境变量
          • 4. 使用Gunicorn启动服务
        • 六、高级部署方案(Systemd服务)
          • 1. 创建Systemd服务文件
          • 2. 环境变量文件
          • 3. 启动服务
        • 七、部署优化技巧
        • 八、版本更新流程
        • 九、方案优势

以下是使用Wheel打包Python Web项目并部署到服务器的完整方案,以Flask/Django项目为例:


一、本地开发环境准备
# 项目结构示例
mywebapp/
├── src/                  # 源码目录
│   ├── __init__.py
│   ├── app.py            # Flask主应用
│   └── views.py
├── requirements.txt      # 依赖文件
├── setup.py              # 打包配置
└── wsgi.py               # WSGI入口
二、创建setup.py打包配置
# setup.py
from setuptools import setup, find_packagessetup(name="mywebapp",version="0.1.0",packages=find_packages(where="src"),package_dir={"": "src"},install_requires=["flask>=2.0.0","gunicorn>=20.0.0",# 其他依赖...],entry_points={'console_scripts': ['webapp-start = wsgi:run_app'  # 启动命令]},include_package_data=True,  # 包含静态文件python_requires=">=3.8",
)
三、创建WSGI入口文件
# wsgi.py
from src.app import create_appdef run_app():app = create_app()app.run(host='0.0.0.0', port=5000)if __name__ == "__main__":run_app()
四、打包生成Wheel文件
# 安装构建工具
pip install wheel setuptools# 生成wheel包
python setup.py bdist_wheel# 生成文件:dist/mywebapp-0.1.0-py3-none-any.whl

五、服务器端部署流程
1. 传输文件到服务器
scp dist/mywebapp-0.1.0-py3-none-any.whl user@server:/opt/webapps/
scp requirements.txt user@server:/opt/webapps/
2. 服务器环境准备
# 创建虚拟环境
python -m venv /opt/venvs/webapp-venv
source /opt/venvs/webapp-venv/bin/activate# 安装wheel和依赖
pip install --upgrade pip
pip install wheel
pip install mywebapp-0.1.0-py3-none-any.whl# 或直接从requirements安装
pip install -r requirements.txt
3. 配置生产环境变量
# 创建环境配置文件
echo "export FLASK_ENV=production" >> /etc/profile.d/webapp.sh
echo "export SECRET_KEY='your_prod_key'" >> /etc/profile.d/webapp.sh
source /etc/profile
4. 使用Gunicorn启动服务
# 直接启动
gunicorn "wsgi:run_app()" -w 4 -b 0.0.0.0:8000# 或使用打包时注册的命令
webapp-start --daemon

六、高级部署方案(Systemd服务)
1. 创建Systemd服务文件
# /etc/systemd/system/webapp.service
[Unit]
Description=My Web Application
After=network.target[Service]
User=webuser
Group=www-data
WorkingDirectory=/opt/webapps
EnvironmentFile=/etc/webapp_env
ExecStart=/opt/venvs/webapp-venv/bin/gunicorn "wsgi:run_app()" -w 4 -b 0.0.0.0:8000
Restart=always[Install]
WantedBy=multi-user.target
2. 环境变量文件
# /etc/webapp_env
FLASK_ENV=production
DATABASE_URL=postgresql://user:pass@db:5432/proddb
SECRET_KEY=your_secure_key
3. 启动服务
sudo systemctl daemon-reload
sudo systemctl start webapp
sudo systemctl enable webapp

七、部署优化技巧
  1. 静态文件处理 - 配置Nginx反向代理:
# /etc/nginx/sites-available/webapp
server {listen 80;server_name yourdomain.com;location /static/ {alias /opt/webapps/static/;expires 30d;}location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
  1. 自动化部署脚本
#!/bin/bash
# deploy.sh
rsync -avz --exclude='.git/' ./ user@server:/opt/webapps/
ssh user@server "cd /opt/webapps && source /opt/venvs/webapp-venv/bin/activate && pip install --upgrade mywebapp-*.whl &&sudo systemctl restart webapp"
  1. 配置健康检查
# 在app.py中添加
@app.route('/health')
def health_check():return jsonify(status="OK"), 200

八、版本更新流程
  1. 修改代码后更新版本号(setup.py
  2. 重新构建wheel包
  3. 上传新wheel文件到服务器
  4. 在虚拟环境中升级:
pip install --upgrade mywebapp-0.2.0-py3-none-any.whl
  1. 重启服务:
sudo systemctl restart webapp

九、方案优势
  1. 隔离性强:虚拟环境隔离依赖
  2. 可重复部署:wheel文件包含所有代码
  3. 版本管理:精确控制部署版本
  4. 服务化:Systemd保证进程持续运行
  5. 资源优化:Nginx处理静态文件减轻Python压力

通过此方案,您可以实现Python Web项目的标准化打包和可靠的生产环境部署,适用于Flask、Django、FastAPI等主流Web框架。

http://www.xdnf.cn/news/933625.html

相关文章:

  • 前端知识导图
  • 嵌入式面试常问问题
  • Spring框架的设计模式
  • 31.1linux中Regmap的API实验(知识)_csdn
  • 【版本控制】Git 和 GitHub 入门教程
  • Flink CDC 中 StartupOptions 模式详解
  • LambdaqueryWrapper的介绍与使用
  • F(x,y)= 0 隐函数 微分法
  • STL详解——list的模拟实现
  • 【CSS-7】深入解析CSS伪类:从基础到高级应用
  • 【Linux】gcc、g++编译器
  • 香橙派3B学习笔记8:snap安装管理软件包_打包俩个有调用的python文件
  • 机器人/智能车纯视觉巡线经典策略—滑动窗口+直方图法
  • Unity3D 开发中的创新技术:解锁 3D 开发的新境界
  • SQL 注入开放与修复
  • NLP学习路线图(三十三): 文本分类
  • LiveCycle Designer 创建提交表单
  • FlexRay总线
  • web架构4------(nginx常用变量,nginx中英文自动匹配,lnmp网站架构,正向代理,反向代理,负载均衡)
  • GPU虚拟化
  • 【 SpringCloud | 微服务 MQ基础 】
  • 【AS32系列MCU调试教程】深度解析:使用 Eclipse 调试AS32系列MCU芯片的工程搭建
  • 永磁同步电机无速度算法--自适应龙贝格观测器
  • 技术栈Etcd的介绍和使用
  • RMQ 算法详解(区间最值问题)
  • 自然语言处理——文本分类
  • Unity使用代码分析Roslyn Analyzers
  • 湖北理元理律师事务所视角:企业债务优化的三维平衡之道
  • Python训练打卡Day43
  • 十二.理解Const关键字