PyCharm Workspace Mode + uv Workspace 实战指南
Python 新一代 Monorepo 工程组织方式
一、前言
最近打开 PyCharm,你可能会看到这样一个提示:
1 | Enable and try workspace mode Beta |
很多人第一反应:
“这是啥?”
“和普通 Project 有什么区别?”
“是不是类似 pnpm workspace?”
“Python 终于开始搞 monorepo 了吗?”
实际上:
这个功能背后,代表的是 Python 工程组织方式的一次重大升级。
而它真正对应的生态,其实是:
1 | uv + pyproject.toml + workspace |
这篇文章会从:
- 为什么需要 Workspace
- 什么是 Monorepo
- uv Workspace 怎么用
- PyCharm Workspace Mode 如何配合
- 实际部署怎么做
- 如何避免架构混乱
完整讲清楚。
二、传统 Python 项目的问题
很多 Python 项目最开始都长这样:
1 | backend/ |
刚开始没问题。
但项目越来越大后:
- import 开始混乱
- 共用代码越来越多
- utils 到处复制
- requirements.txt 爆炸
- IDE indexing 越来越慢
- 多服务越来越难管理
最后你会看到:
1 | utils_final.py |
整个工程开始失控。
三、为什么现在都在搞 Monorepo
现代 AI / 后端项目越来越复杂:
例如:
1 | AI 平台 |
如果每个都是独立仓库:
- 版本同步困难
- 共用代码麻烦
- SDK 更新痛苦
- 调试困难
- 本地开发复杂
于是很多公司开始统一:
1 | 一个大仓库(Monorepo) |
四、什么是 Workspace
Workspace 本质上:
不是部署工具。
而是:
1 | 多项目统一开发管理 |
例如:
1 | my-platform/ |
这里:
- apps 是服务
- libs 是共享代码
整个仓库:
1 | 一个 workspace |
五、为什么 PyCharm 要推出 Workspace Mode
以前 PyCharm 的模型:
1 | 一个 Project = 一个工程 |
但现在:
一个仓库可能包含:
- API
- SDK
- Shared
- Worker
- Agent
于是 JetBrains 推出了:
1 | Workspace Mode |
它能自动:
- 识别多个子项目
- 建立依赖关系
- 自动配置 SDK
- 自动 linking
- 自动处理 import
六、为什么 uv 是关键
现在 Python 新生态核心正在变成:
1 | uv |
而不是:
1 | requirements.txt |
uv 是 Astral 推出的新一代 Python 包管理工具。
特点:
- 极快
- 原生 workspace
- 自动 venv
- lockfile
- monorepo 支持优秀
七、开始实战:创建 Workspace
1. 安装 uv
Mac:
1 | brew install uv |
Linux / Mac:
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
检查:
1 | uv --version |
2. 创建根目录
1 | mkdir my-platform |
初始化:
1 | uv init |
3. 配置 Workspace Root
修改根目录:
pyproject.toml
1 | [project] |
八、创建子项目
1. 创建 API 服务
1 | mkdir -p apps/api |
2. 创建共享库
1 | mkdir -p libs/shared |
这里:
1 | --lib |
表示:
1 | 这是一个 library |
而不是 app。
九、配置 Workspace 内部依赖
例如:
1 | api |
那么:
apps/api/pyproject.toml
1 | [project] |
这里:
1 | workspace = true |
是核心。
意思:
1 | shared 不从 PyPI 安装 |
十、统一安装依赖
回到根目录:
1 | cd my-platform |
执行:
1 | uv sync |
或者:
1 | uv sync --all-packages |
这会:
- 创建统一 .venv
- 安装全部依赖
- 建立 workspace linking
- 生成 uv.lock
十一、PyCharm 如何配置 Workspace Mode
直接:
1 | 打开整个 my-platform |
不是打开:
1 | apps/api |
然后:
PyCharm 会自动检测:
1 | workspace project detected |
开启:
1 | Enable Workspace Mode |
或者:
1 | Settings |
开启即可。
十二、开启后会发生什么
PyCharm 会自动:
自动识别所有成员
例如:
1 | apps/api |
自动处理 import
以前:
1 | from shared.utils import xxx |
可能飘红。
现在:
自动识别。
自动统一 SDK
整个 workspace 共用:
1 | .venv |
不需要手动切换 interpreter。
十三、部署怎么办?
很多人会问:
“如果 API 依赖 shared,
那部署 API 时不是整个 monorepo 都要部署?”
答案:
1 | 不是 |
十四、要区分两种东西
1. 代码级依赖
例如:
1 | shared/ |
这些本来就应该跟随 API。
因为:
API 运行需要它们。
2. 服务级依赖
例如:
1 | worker/ |
这些不应该直接 import。
应该:
- HTTP
- gRPC
- MQ
- Redis Queue
通信。
十五、正确的 Monorepo 架构
推荐:
1 | my-platform/ |
规则:
apps
独立服务。
不要互相 import。
libs
共享代码。
允许 workspace dependency。
十六、Docker 如何部署
例如:
API Dockerfile:
1 | FROM python:3.12 |
这里:
1 | uv sync --package api |
只会安装:
- api
- api 的 workspace 依赖
不会安装整个 monorepo。
十七、推荐的一套现代 Python 技术栈
当前非常推荐:
1 | uv |
这是目前 Python 新工程体系里,
最接近现代化大型工程的一种方案。
十八、总结
PyCharm Workspace Mode 的核心不是:
1 | “多开几个目录” |
而是:
1 | Python 开始正式进入 Monorepo 时代 |
而 uv Workspace:
则是这个生态的真正基础。
未来几年:
1 | uv + workspace |
大概率会逐渐成为:
大型 Python 项目的标准组织方式。