前提条件

安装 pyenv pyenv 是 Python 版本管理工具,用来管理不同的 Python 版本。你需要先安装 pyenvpyenv-virtualenv

安装 pyenv

# 安装 pyenv
curl https://pyenv.run | bash

安装 pyenv-virtualenv

pyenv install pyenv-virtualenv

步骤

1. 安装 Python 版本

使用 pyenv 安装合适的 Python 版本:

pyenv install 3.11.2  # 安装指定版本的 Python
pyenv global 3.11.2   # 设置为全局默认版本

你也可以创建一个虚拟环境:

pyenv virtualenv 3.11.2 myenv  # 创建虚拟环境
pyenv activate myenv           # 激活虚拟环境

安装 pex 工具 pex 用于打包 Python 项目为可执行文件。

pip install pex

然后安装依赖:

pip install -r requirements.txt

2. 创建 setup.py 文件(可选)

如果你的项目没有 setup.py 文件,建议手动创建一个。这个文件定义了模块和依赖。

# setup.py
from setuptools import setup

setup(
    name="your_project_name",  # 项目名称
    version="0.1",
    py_modules=["app"],  # 你的主模块名称,确保 app.py 存在
    install_requires=[  # 如果有外部依赖,列在此处
        "flask",
        "requests"
    ],
)

4. 编译为 PEX 文件

使用 pex 将你的项目打包为 PEX 文件。确保在项目根目录下运行命令:

pex . -m app -o rain1226.pex
  • .:表示当前目录。
  • -m app:指定项目的主模块(例如 app.py)。
  • -o rain1226.pex:输出的 PEX 文件名称。

如果没有 setup.py,可以禁用依赖安装:

pex . -m app -o rain1226.pex --no-pip --no-emit-warnings

5. 运行 PEX 文件

成功生成 PEX 文件后,可以使用以下命令运行:

./rain1226.pex  # 直接运行 PEX 文件

如果你希望使用不同的 Python 版本,可以确保正确的环境被激活。

额外技巧

  • 更改 PEX 版本:如果需要使用不同的 PEX 版本,可以指定:

    pex . -m app -o rain1226.pex --python-shebang="/usr/bin/python3"
    

手动加载 .env 文件(通过 shell 脚本): 如果你不想在代码中加载 .env,可以通过 shell 脚本加载 .env 文件:


#!/bin/bash
# 加载 .env 文件
export $(cat .env | xargs)

# 日志文件名
LOGFILE="output.log"

# 运行 .pex 文件并将日志保存到当前目录
./my_project.pex >> "$LOGFILE" 2>&1

# 输出日志文件路径
echo "日志已保存到 $LOGFILE"

这样在运行 .pex 文件之前,export 会将 .env 文件中的环境变量加载到当前 shell 环境。

总结

  1. 使用 pyenv 安装和管理 Python 版本。
  2. 使用 pex 将 Python 项目打包成 PEX 文件。
  3. 确保项目结构正确,必要时创建 setup.py 文件。
  4. 通过 --no-pip 等选项来定制构建过程。
  5. 调试时使用 -v 参数查看详细日志。

通过这些步骤,你就可以顺利将 Python 项目编译为一个独立的 PEX 文件,方便部署和运行。