1055 字
5 分钟
Python 项目管理新思路:用 uv Workspace 共享虚拟环境,省时省空间!
背景
上手 uv 一段时间后,真心觉得这款工具让 Python 项目管理变得省心不少!它不仅操作便捷,安装第三方包的速度更是快得飞起。
不过,在使用过程中也发现了一个小痛点:uv 默认会为每个项目创建独立的虚拟环境。这意味着,如果你同时开发多个项目,即使它们依赖相同的第三方包(比如常用的 requests、pandas),这些包也需要在每个项目的虚拟环境中重复安装。久而久之,宝贵的磁盘空间就这样被悄悄占用了不少。
难道只能忍受这种“甜蜜的负担”吗?当然不是!仔细翻阅 uv 的文档后发现,它其实贴心地提供了工作空间(Workspace)功能!通过工作空间,你可以让多个项目共享同一个虚拟环境。这样一来,公共依赖包只需安装一次,所有关联项目都能顺畅使用,大幅减少了重复安装带来的空间浪费,管理效率再上一个台阶!
在尝试获取 uv 工作空间(Workspace) 功能的相关信息时,小编注意到 DeepSeek 模型提供的回答有时存在不准确或偏离主题的情况。
这表明,uv 这一相对较新的功能细节,可能尚未被充分纳入 DeepSeek 当前模型版本的训练数据。这一现象也提醒我们,即使是强大的 AI 模型,其知识覆盖和能力也存在一定的边界与时效性局限
小编环境
import sys
print('python 版本:',sys.version.split('|')[0])#python 版本: 3.11.11uv self version# uv 0.8.2 (21fadbcc1 2025-07-22)工作空间示例
- 创建根项目,并添加一个三方包
pandas在根项目的文件夹里面生成一个虚拟环境.venv,pandas被安装在该文件夹内
uv init workspace_project -p 3.11cd workspace_projectuv add pandasuv treeworkspace-project v0.1.0└── pandas v2.3.1 ├── numpy v2.3.1 ├── python-dateutil v2.9.0.post0 │ └── six v1.17.0 ├── pytz v2025.2 └── tzdata v2025.2- 创建子项目1,并添加一个三方包
fastapi在子项目中添加的包,会被安装到根项目的虚拟环境.venv中
pwd # D:\桌面\Python\uv\workspace_projectuv init sub_project1 # 创建子项目1cd sub_project1uv add fastapiuv treeworkspace-project v0.1.0└── pandas v2.3.1 ├── numpy v2.3.1 ├── python-dateutil v2.9.0.post0 │ └── six v1.17.0 ├── pytz v2025.2 └── tzdata v2025.2sub-project1 v0.1.0└── fastapi v0.116.1 ├── pydantic v2.11.7 │ ├── annotated-types v0.7.0 │ ├── pydantic-core v2.33.2 │ │ └── typing-extensions v4.14.1 │ ├── typing-extensions v4.14.1 │ └── typing-inspection v0.4.1 │ └── typing-extensions v4.14.1 ├── starlette v0.47.2 │ ├── anyio v4.9.0 │ │ ├── idna v3.10 │ │ ├── sniffio v1.3.1 │ │ └── typing-extensions v4.14.1 │ └── typing-extensions v4.14.1 └── typing-extensions v4.14.1- 创建子项目2,并添加一个三方包
requests
pwd # D:\桌面\Python\uv\workspace_projectuv init sub_project2 # 创建子项目1cd sub_project2uv add requestsuv treeworkspace-project v0.1.0└── pandas v2.3.1 ├── numpy v2.3.1 ├── python-dateutil v2.9.0.post0 │ └── six v1.17.0 ├── pytz v2025.2 └── tzdata v2025.2sub-project2 v0.1.0└── requests v2.32.4 ├── certifi v2025.7.14 ├── charset-normalizer v3.4.2 ├── idna v3.10 └── urllib3 v2.5.0sub-project1 v0.1.0└── fastapi v0.116.1 ├── pydantic v2.11.7 │ ├── annotated-types v0.7.0 │ ├── pydantic-core v2.33.2 │ │ └── typing-extensions v4.14.1 │ ├── typing-extensions v4.14.1 │ └── typing-inspection v0.4.1 │ └── typing-extensions v4.14.1 ├── starlette v0.47.2 │ ├── anyio v4.9.0 │ │ ├── idna v3.10 │ │ ├── sniffio v1.3.1 │ │ └── typing-extensions v4.14.1 │ └── typing-extensions v4.14.1 └── typing-extensions v4.14.1所有的三方包都安装在根项目的虚拟环境内,path\workspace_project\.venv\Lib\site-packages,这样公共依赖包只需安装一次
以上的操作,其实是 uv 自动在根项目的配置文件 pyproject.toml 中,增加了如下配置,这样 uv 才识别所有项目同属于一个工作空间
[tool.uv.workspace]members = [ "sub_project1", "sub_project2",]- 在子项目2中使用同工作空间其它项目安装的包
import pandas as pdimport fastapi
def main(): print("Hello from sub-project2!")
if __name__ == "__main__": main() print('pandas版本:',pd.__version__) print('fastapi版本:',fastapi.__version__)运行:
pwd # D:\桌面\Python\uv\workspace_project\sub_project2uv run .\main.py# Hello from sub-project2!# pandas版本: 2.3.1# fastapi版本: 0.116.1历史相关文章
以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货