环境搭建:从零开始跑通第一个Prefect流程

说实话,很多人在学习工作流框架时,第一步就卡住了——不是装不上,就是装上了跑不起来。Prefect在这方面做得还算友好,但有些细节不注意,照样会踩坑。这一章,我带你把环境从头搭一遍,最后跑通一个Hello World。

本章目标:完成Python环境准备 → 安装Prefect → 启动UI → 跑通第一个流程。全程大约15分钟。

Python环境准备

Prefect 2.x 要求 Python 3.8 以上。我个人习惯用 Python 3.10,兼容性最好,踩坑最少。

先检查你的Python版本:

python --version
# 或者
python3 --version

如果版本低于3.8,建议先升级。我推荐用 pyenv 管理多版本Python,尤其是你需要在不同项目间切换时。

小技巧:用虚拟环境隔离Prefect项目,别直接装到系统Python里。我曾经图省事直接装全局,结果跟另一个项目的依赖打架,折腾了半小时。

创建虚拟环境:

python -m venv prefect-env
source prefect-env/bin/activate  # Linux/Mac
# 或者
prefect-env\Scripts\activate     # Windows

看到终端前面多了 (prefect-env) 前缀,说明环境激活成功。

安装Prefect

安装命令就一行:

pip install prefect

等等,别急着敲回车。先确认你的pip版本够新:

pip install --upgrade pip

然后安装Prefect。安装完成后,验证一下:

prefect version

你会看到类似这样的输出:

Version:     2.14.0
API version: 0.8.4
Python:      3.10.12

注意:如果提示 command not found,八成是虚拟环境没激活,或者pip安装路径没加到PATH里。检查一下 which prefect 指向哪里。

Prefect UI 启动

Prefect 2.x 自带一个Web UI,用来查看流程运行状态、日志、任务图。启动方式很简单:

prefect server start

第一次启动会自动下载依赖,稍等一会儿。看到类似下面的日志,说明启动成功:

Starting Prefect server...
...
Server started on http://127.0.0.1:4200

打开浏览器,访问 http://localhost:4200。你会看到一个清爽的仪表盘,左侧有导航菜单。

嗯,这里要注意:UI默认是空的,因为你还没跑过任何流程。别慌,接下来我们就让它有点东西。

关于端口:如果4200被占用,可以用 prefect server start --port 4300 指定其他端口。我在公司内网遇到过端口冲突,改个端口就好了。

第一个Hello World流程

现在写一个最简单的Prefect流程。新建一个Python文件,比如 hello_flow.py:

from prefect import flow, task

@task
def say_hello():
    print("Hello, Prefect!")
    return "Hello, Prefect!"

@flow
def hello_flow():
    result = say_hello()
    print(f"Flow completed with: {result}")

if __name__ == "__main__":
    hello_flow()

代码很简单:

  • @task 装饰器把一个普通函数变成Prefect任务
  • @flow 装饰器把函数变成工作流
  • 在flow里调用task,Prefect会自动编排执行顺序

运行它:

python hello_flow.py

你会看到类似这样的输出:

17:32:15.123 | INFO    | prefect.engine - Created flow run 'fancy-koi' for flow 'hello-flow'
17:32:15.456 | INFO    | Task run 'say_hello-0' - Hello, Prefect!
17:32:15.789 | INFO    | Flow run 'fancy-koi' - Flow completed with: Hello, Prefect!

注意看,Prefect自动给流程和任务分配了运行ID(比如 fancy-koi),还带了时间戳和日志级别。这就是Prefect帮你做的第一件事——可观测性。

现在刷新一下UI页面,你会看到刚才的流程运行记录出现在仪表盘上。点进去,能看到任务图、日志、运行时长等信息。

核心概念:@flow 是编排的入口,@task 是执行的最小单元。一个flow可以包含多个task,task之间可以传递数据、依赖等待。这就是Prefect工作流的基本模型。

知识体系总览

下面这张图概括了本章的核心逻辑:

环境搭建知识体系 Python环境 版本 ≥ 3.8 + 虚拟环境 Prefect安装 pip install prefect UI启动 prefect server start Prefect核心概念 @flow(工作流入口) → @task(执行单元) → 自动编排 + 可观测性 Hello World 流程 定义 → 运行 → UI查看运行记录 ✅ 第一个Prefect流程跑通

常见问题与避坑

问题 原因 解决办法
prefect: command not found 虚拟环境未激活或pip安装路径不在PATH 检查 which prefect,重新激活虚拟环境
UI页面空白或报错 端口被占用或依赖未下载完成 换端口启动,或等首次启动的依赖下载完成
流程运行后UI看不到记录 Prefect Server未运行或API地址不匹配 确认 prefect server start 在运行中
安装时依赖冲突 全局Python包版本混乱 使用虚拟环境,从干净环境重新安装

重要提醒:Prefect 2.x 和 1.x 的API差异很大。如果你在网上搜到旧教程,注意看版本。我曾经照着1.x的文档配了半天,结果发现装饰器名字都不一样了。

验证环境是否就绪

跑完Hello World之后,我建议你做一次快速验证,确保后续章节不会因为环境问题卡住:

  1. 终端能正常执行 prefect version
  2. 浏览器能打开 http://localhost:4200
  3. Hello World流程在UI中有运行记录
  4. 虚拟环境里能正常导入 from prefect import flow, task

这四点都满足,环境搭建就算完成了。你想想看,从零到跑通第一个流程,其实就三步:装Python、装Prefect、写一个带装饰器的函数。Prefect把复杂的工作流抽象成了你熟悉的Python函数,这就是它优雅的地方。

个人习惯:我会把 prefect server start 放在一个后台终端里,或者用 nohup 让它常驻。这样开发时随时可以查看运行状态,不用每次重新启动。