温馨提示×

Ubuntu Python应用如何发布

小樊
53
2025-09-27 11:36:02
栏目: 编程语言

Ubuntu环境下Python应用的发布流程主要分为 Web应用部署(常见于Flask/Django等框架)和桌面可执行文件打包两类场景,以下是具体步骤:

一、Ubuntu上部署Python Web应用(如Flask/Django)

1. 准备工作

  • 安装基础工具:确保Ubuntu系统安装Python 3、pip及git(用于代码管理):
    sudo apt update && sudo apt install python3 python3-pip git -y
    
  • 配置虚拟环境(隔离依赖,避免版本冲突):
    sudo apt install python3-venv -y  # 安装venv模块
    python3 -m venv myenv             # 创建虚拟环境(myenv为环境名)
    source myenv/bin/activate         # 激活环境(终端提示符会显示(myenv))
    

2. 上传与安装依赖

  • 上传代码:通过git clone(若代码托管在GitHub/Gitee)或scp(本地传输)将项目上传至服务器:
    git clone https://github.com/your-username/your-webapp.git  # git方式
    # 或
    scp -r /local/path/to/project username@server_ip:/remote/path  # scp方式
    
  • 安装依赖:进入项目目录,通过requirements.txt安装所有依赖(需提前在本地生成该文件:pip freeze > requirements.txt):
    pip install -r requirements.txt
    

3. 运行应用

  • 使用WSGI服务器(如Gunicorn,替代Python内置服务器):
    假设项目入口文件为app.py,应用对象为app(Flask)或application(Django),运行命令:
    pip install gunicorn  # 安装Gunicorn
    gunicorn --bind 0.0.0.0:8000 app:app  # 绑定所有IP的8000端口
    
  • 配置反向代理(如Nginx,处理HTTP请求并转发至Gunicorn):
    sudo apt install nginx -y  # 安装Nginx
    sudo nano /etc/nginx/sites-available/yourapp  # 创建配置文件
    
    添加以下内容(替换your_domain_or_ip为域名或服务器IP):
    server {
        listen 80;
        server_name your_domain_or_ip;
        location / {
            proxy_pass http://127.0.0.1:8000;  # 转发至Gunicorn
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    启用配置并重启Nginx:
    sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/  # 软链接配置文件
    sudo systemctl restart nginx  # 重启Nginx
    

4. 设置开机自启(可选但推荐)

通过systemd创建服务,确保应用在服务器重启后自动运行:

sudo nano /etc/systemd/system/my_python_service.service

添加以下内容(替换路径和用户):

[Unit]
Description=My Python Web Application
After=network.target

[Service]
User=your_username  # 替换为你的用户名
ExecStart=/path/to/your/venv/bin/gunicorn --bind 0.0.0.0:8000 app:app  # 替换为虚拟环境中的Gunicorn路径
Restart=always  # 失败后自动重启

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable my_python_service  # 开机自启
sudo systemctl start my_python_service   # 立即启动

二、Ubuntu上将Python应用打包为可执行文件(桌面应用)

若需将Python脚本转换为无需安装Python即可运行的可执行文件(如.exe或Linux二进制文件),可使用以下工具:

1. 使用PyInstaller(最常用)

  • 安装PyInstaller
    pip install pyinstaller
    
  • 打包脚本:进入项目目录,运行以下命令(--onefile生成单个可执行文件,省略则生成包含依赖的文件夹):
    pyinstaller --onefile your_script.py  # your_script.py为入口脚本
    
  • 获取可执行文件:打包完成后,在dist/目录下找到生成的可执行文件(如your_script,Linux下无后缀;Windows下为.exe)。

2. 使用cx_Freeze(适合复杂项目)

  • 安装cx_Freeze
    pip install cx_Freeze
    
  • 创建setup.py文件(项目根目录下):
    from cx_Freeze import setup, Executable
    setup(
        name="YourApp",
        version="0.1",
        description="Your application description",
        options={"build_exe": {"packages": ["os"], "excludes": ["tkinter"]}},  # 指定包含/排除的包
        executables=[Executable("your_script.py")]  # 入口脚本
    )
    
  • 打包应用
    python setup.py build
    
  • 获取可执行文件:打包完成后,在build/目录下找到生成的可执行文件。

3. 注意事项

  • 跨平台问题:打包后的可执行文件仅能在当前操作系统运行(如Ubuntu打包的文件无法在Windows直接使用),需在目标平台重新打包。
  • 资源文件:若应用包含图片、配置文件等资源,需在打包时通过--add-data参数指定(如PyInstaller的--add-data "config.ini:.")。
  • 依赖检查:确保虚拟环境中安装了所有必要的依赖,否则打包后的文件可能无法运行。

以上流程覆盖了Ubuntu环境下Python应用的主要发布场景,可根据应用类型(Web/桌面)选择对应方法。

0