Ubuntu环境下Python应用的发布流程主要分为 Web应用部署(常见于Flask/Django等框架)和桌面可执行文件打包两类场景,以下是具体步骤:
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))
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
app.py,应用对象为app(Flask)或application(Django),运行命令:pip install gunicorn # 安装Gunicorn
gunicorn --bind 0.0.0.0:8000 app:app # 绑定所有IP的8000端口
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
通过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 # 立即启动
若需将Python脚本转换为无需安装Python即可运行的可执行文件(如.exe或Linux二进制文件),可使用以下工具:
pip install pyinstaller
--onefile生成单个可执行文件,省略则生成包含依赖的文件夹):pyinstaller --onefile your_script.py # your_script.py为入口脚本
dist/目录下找到生成的可执行文件(如your_script,Linux下无后缀;Windows下为.exe)。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/目录下找到生成的可执行文件。--add-data参数指定(如PyInstaller的--add-data "config.ini:.")。以上流程覆盖了Ubuntu环境下Python应用的主要发布场景,可根据应用类型(Web/桌面)选择对应方法。