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.pswp.cn/pingmian/84038.shtml

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

相关文章

c++ 基于openssl MD5用法

基于openssl MD5用法 #include <iostream> #include <openssl/md5.h> using namespace std; int main(int argc, char* argv[]) { cout << "Test Hash!" << endl; unsigned char data[] "测试md5数据"; unsigned char out[1024…

如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址

服务器作为一个数据终端&#xff0c;是很多企事业单位不可获缺的重要设备&#xff0c;多数公司本地都会有部署服务器供测试或部署一些网络项目使用。有人说服务器就是计算机&#xff0c;其实这种说法不是很准确。准确的说服务器算是计算机的一种&#xff0c;它的作用是管理计算…

安装Openstack

基本按照Ubuntu官网的指南来安装&#xff0c;使用单节点模式&#xff0c;官网步骤参见网址&#xff1a;https://ubuntu.com/openstack/install 系统为Ubuntu 24.04.2&#xff0c;全新安装. Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.11.0-24-generic x86_64)kaiexperiment…

‌Kafka与RabbitMQ的核心区别

‌1.设计目标与适用场景‌ ‌Kafka‌&#xff1a;专注于高吞吐量的分布式流处理平台&#xff0c;适合处理大数据流&#xff08;如日志收集、实时数据分析&#xff09;&#xff0c;强调消息的顺序性和扩展性。‌‌ ‌RabbitMQ‌&#xff1a;作为消息中间件&#xff0c;侧重于消…

深入理解 Spring Cache 及其核心注解

一、Spring Cache 概述​ Spring Cache 并不是一个具体的缓存实现方案&#xff0c;而是一套抽象的缓存规范。它支持多种缓存技术&#xff0c;如 Ehcache、Redis、Caffeine 等&#xff0c;开发者可以根据项目需求灵活选择合适的缓存技术。其核心思想是通过在方法上添加注解&…

STM32H562----------串口通信(UART)

1、串口介绍 1.1、 数据通信概念 在单片机中我们常用的通信方式有 USART、IIC、SPI、CAN、USB 等; 1、数据通信方式 根据数据通信方式可分为串行通信和并行通信两种,如下图: 串行通信基本特征是数据逐位顺序依次传输,优点:传输线少成本低,抗干扰能力强可用于远距离传…

20-Oracle 23 ai free Database Sharding-特性验证

对于Oracle 23ai Sharding 新特性的验证脚本&#xff0c;目标是涵盖其核心改进和新增功能。基于 Oracle 23ai 的 Sharding 特性总结&#xff08;Raft 协议、True Cache、Vector等&#xff09;&#xff0c;结合常见场景验证。 通过SQL脚本验证这些特性。例如&#xff1a; 1.基于…

✅ 常用 Java HTTP 客户端汇总及使用示例

在 Java 开发中,HTTP 客户端是与服务端交互的关键组件。随着技术发展,出现了多种 HTTP 客户端库,本文汇总了常用的 Java HTTP 客户端,介绍其特点、适用场景,并附上简单使用示例,方便开发者快速选择和上手。 1.常用 HTTP 客户端一览 名称简介特点HttpClient(JDK 自带)Ja…

MCP(Model Context Protocol)与提示词撰写

随着大模型&#xff08;LLM&#xff09;在复杂任务中的普及&#xff0c;如何让模型高效调用外部工具和数据成为关键挑战。传统函数调用&#xff08;Function Calling&#xff09;依赖开发者手动封装 API&#xff0c;而 MCP&#xff08;Model Context Protocol&#xff09; 通过…

RootSIFT的目标定位,opencvsharp。

首先截取匹配模板&#xff0c;然后使用rootsift特征匹配&#xff0c;最后定位目标。 对于微弱变化&#xff0c;还是能够识别定位的&#xff0c;对于传统算法来说已经不错了。 目标定位效果&#xff1a; 使用的模板图片。 using OpenCvSharp; using OpenCvSharp.Features2D;u…

Appium如何支持ios真机测试

ios模拟器上UI自动化测试 以appiumwebdriverio为例&#xff0c;详细介绍如何在模拟器上安装和测试app。在使用ios模拟器前&#xff0c;需要安装xcode&#xff0c;创建和启动一个simulator。simulator创建好后&#xff0c;就可以使用xcrun simctl命令安装被测应用并开始测试了。…

近几年字节飞书测开部分面试题整理

文章目录 一、面试问题1. 创建索引2. 拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;的区别3. 为什么jwt令牌代替session&#xff1f;4. 有一个100行的数据&#xff0c;和一个1万行的数据&#xff0c;写sql 的时候要注意什么&#xff1f;5.…

JDBC基础关键_001_认识

目 录 一、概述 二、原理 三、接口的作用 四、JDBC 模拟 1.JDBC 接口 2.驱动 3.配置文件 4.调用者 一、概述 JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;Java 数据库连接&#xff1b;是用 Java 语言操作数据库&#xff0c;使用 Java 语言向数…

SWAN(Scade One) 语言原理介绍

SCADE 团队于2024年推出了下一代 SCADE 工具 Scade One&#xff0c;工具的建模语言也基于Scade 6 进行了演化。在语言命名方面&#xff0c;并没有复用"Scade"这一标志性的名称&#xff0c;而是使用了新的名字&#xff1a;Swan。在本篇中&#xff0c;将叙述 Swan 语言…

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…

sql中group by使用场景

GROUP BY语句在SQL中用于将多个记录分组为较小的记录集合&#xff0c;以便对每个组执行聚合函数&#xff0c;如COUNT(), MAX(), MIN(), SUM(), AVG()等。GROUP BY的使用场景非常广泛&#xff0c;以下是一些典型的应用场景&#xff1a; 统计数量 当你想要计算某个字段的唯一值数…

MongoDB慢查询临时开启方法讲解

1、首先连接数据库 mongosh "mongodb://localhost:27017" 2、选择目标数据库 show databases;#显示所有数据库 use lidb;#使用某数据库 3、查看当前分析级别 db.getProfilingStatus() 输出 { was: 0, slowms: 100, sampleRate: 1, ok: 1 } #was0表示关闭&…

UML活动图与泳道图

活动图的作用&#xff0c;与用例图类似&#xff0c;也是帮助我们捕获用户的需求。 活动图主要是用来描述用户的业务流程&#xff0c;如果能把用户的这个业务流程描述的很清楚的话&#xff0c;就可以帮助我们做用例分析。 1 活动图定义 活动图描述了在一个过程中&#xff0c;…

算法练习-回溯

今天给大家带来的是在dfs查用的降低复杂度的方法---剪枝 所谓减枝 第一题 代码部分&#xff1a;&#xff08;未剪枝&#xff09; 代码部分&#xff08;剪枝&#xff09; 第二题 代码部分&#xff08;未剪枝&#xff09; 剪枝后 通过这些题目可以看出如果没有进行剪枝操作&#…

Elasticsearch + Milvus 构建高效知识库问答系统《一》

&#x1f50d; Elasticsearch Milvus 构建高效知识库问答系统&#xff08;RAG 技术实战&#xff09; &#x1f4cc; 目录 背景介绍Elasticsearch 在知识库检索中的作用Milvus 在知识库检索中的作用混合检索&#xff1a;Elasticsearch Milvus完整代码实现部署建议与优化方向…