惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
WordPress大学
WordPress大学
Help Net Security
Help Net Security
Jina AI
Jina AI
Security Latest
Security Latest
Y
Y Combinator Blog
Project Zero
Project Zero
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
博客园 - 司徒正美
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
D
Docker
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
C
CERT Recently Published Vulnerability Notes
B
Blog
L
LangChain Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
The Hacker News
The Hacker News
C
Check Point Blog
L
Lohrmann on Cybersecurity
V2EX - 技术
V2EX - 技术
S
Securelist
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
TaoSecurity Blog
TaoSecurity Blog
云风的 BLOG
云风的 BLOG
Latest news
Latest news
人人都是产品经理
人人都是产品经理
L
LINUX DO - 最新话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
Webroot Blog
Webroot Blog
Simon Willison's Weblog
Simon Willison's Weblog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
小众软件
小众软件
T
Tailwind CSS Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
O
OpenAI News

追梦人物的博客

0x05:Merkle Tree & Patricia Trie 0x04:ECDSA - 以太坊设计与实现 LeetCode 105 从前序与中序遍历构造二叉树 迭代算法原理 + 完整证明 0x03:Address - 以太坊设计与实现 0x02:Secp256k1 - 以太坊设计与实现 0x00:专栏开篇 - 以太坊设计与实现 0x01:RLP 编码 - 以太坊设计与实现 Bellman-Ford 算法原理及其在 DeFi 套利中的应用 - 追梦人物的博客 迪杰斯特拉(Dijkstra)最短路径算法原理、实现与证明 - 追梦人物的博客 实战:CEX-DEX 稳定币套利监控程序开发 - 追梦人物的博客 CEX-DEX 稳定币套利模型 - 追梦人物的博客 Uniswap 手续费和协议费机制剖析 - 追梦人物的博客 Uniswap 流动性机制及相关数学原理分析 - 追梦人物的博客 Rust 项目从创建到发布 - 追梦人物的博客 VS Code 调试 Python - 追梦人物的博客 比特币跨市场套利的数学模型 - 追梦人物的博客 ERC-20 相关知识点总结 - 追梦人物的博客 Django 老项目如何从 SQLite 迁到 PostgreSQL 自动生成接口文档 - HelloDjango - django REST framework 教程 单元测试 - HelloDjango - django REST framework 教程 限制接口访问频率 - HelloDjango - django REST framework 教程 API 版本管理 - HelloDjango - django REST framework 教程 如何在 Windows 下搭建高效的 django 开发环境 拓展Python Markdown - 追梦人物的博客 加缓存为接口提速 - HelloDjango - django REST framework 教程 基于 drf-haystack 实现文章搜索接口 - HelloDjango 评论接口 - HelloDjango - django REST framework 教程 实现分类、标签、归档日期接口 - HelloDjango - django REST framework 教程 在接口返回Markdown解析后的内容 - HelloDjango - django REST framework 教程 文章详情接口 - HelloDjango - django REST framework 教程 分页 - HelloDjango - django REST framework 教程 使用视图集简化代码 - HelloDjango - django REST framework 教程 用类视图实现首页 API - HelloDjango - django REST framework 教程 实现博客首页文章列表 API - HelloDjango - django REST framework 教程 初始化 RESTful API 风格的博客系统 - HelloDjango django-rest-framework 是什么鬼? - HelloDjango - django REST framework 教程 结束 or 开始? - HelloDjango Coverage.py 统计测试覆盖率 - HelloDjango - Django博客教程(第二版) 单元测试:测试评论应用 - HelloDjango - Django博客教程(第二版) 单元测试:测试 blog 应用 - HelloDjango Django Haystack 全文检索与关键词高亮 - HelloDjango Django 博客实现简单的全文搜索 - HelloDjango - Django博客教程(第二版) 开启 Django 博客的 RSS 功能 - HelloDjango 统计各个分类和标签下的文章数 - HelloDjango - Django博客教程(第二版) 稳定易用的 Django 分页库,完善分页功能 - HelloDjango 通过 Django Pagination 实现简单分页 - HelloDjango 在脚本中使用 ORM:Faker 批量生成测试数据 - HelloDjango Django 官方推荐的姿势:类视图 - HelloDjango - Django博客教程(第二版) Django 使用 union 合并不同模型(Model) 的查询集(QuerySet) 开发博客文章阅读量统计功能 - HelloDjango - Django博客教程(第二版) 使用 Docker 让部署 Django 项目更加轻松 - HelloDjango 使用 Certbot 向 Let's Encrypt 免费申请 HTTPS 证书 - HelloDjango 使用 Fabric 自动化部署 - HelloDjango 博客代码开源啦 - 追梦人物的博客 (赠书)推荐一本django书籍:Django企业开发实战 - 追梦人物的博客 Nginx+Gunicorn+Supervisor 部署 Django 博客应用 - HelloDjango 优化博客功能细节,提升使用体验 - HelloDjango - Django博客教程(第二版) 交流的桥梁:评论功能 - HelloDjango - Django博客教程(第二版) 分类、归档和标签页 - HelloDjango - Django博客教程(第二版) 页面侧边栏:使用自定义模板标签 - HelloDjango - Django博客教程(第二版) 自动生成文章摘要 - HelloDjango - Django博客教程(第二版) Markdown 文章自动生成目录,提升阅读体验 - HelloDjango - Django博客教程(第二版) 让博客支持 Markdown 语法和代码高亮 - HelloDjango 开发博客文章详情页 - HelloDjango - Django博客教程(第二版) 创作后台开启,请开始你的表演 - HelloDjango - Django博客教程(第二版) 博客从“裸奔”到“有皮肤” - HelloDjango - Django博客教程(第二版) Django 的接客之道 - HelloDjango - Django博客教程(第二版) Django 迁移、操作数据库 - HelloDjango - Django博客教程(第二版) 创建 Django 博客的数据库模型 - HelloDjango 开始进入 django 开发之旅 - HelloDjango "空空如也"的博客应用 - HelloDjango - Django博客教程(第二版) 一种自顶而下的Python装饰器设计方法 - 追梦人物的博客 Python提取支付宝和微信支付二维码 - 追梦人物的博客 2018 - 我的学生生涯最后一年回顾 - 追梦人物的博客 批量清除todo练习参考答案 - Vue 2.x Todo 教程练习参考答案 筛选练习参考答案 - Vue 2.x Todo 教程练习参考答案 删除todo练习参考答案 - Vue 2.x Todo 教程练习参考答案 编辑todo练习参考答案 - Vue 2.x Todo 教程练习参考答案 添加todo练习参考答案 - Vue 2.x Todo 教程练习参考答案 标为完成练习参考答案 - Vue 2.x Todo 教程练习参考答案 入门仪式_Hello_Vue练习参考答案 - Vue 2.x Todo 教程练习参考答案 组件化todo应用 - Vue 2.x Todo 教程 批量清除todo - Vue 2.x Todo 教程 本地存储 - Vue 2.x Todo 教程 筛选 - Vue 2.x Todo 教程 还剩多少todo未完成 - Vue 2.x Todo 教程 自定义指令实现自动聚焦 - Vue 2.x Todo 教程 全部标为完成 - Vue 2.x Todo 教程 删除todo - Vue 2.x Todo 教程 编辑todo - Vue 2.x Todo 教程 添加todo - Vue 2.x Todo 教程 标为完成 - Vue 2.x Todo 教程 UI - Vue 2.x Todo 教程 显示todo列表 - Vue 2.x Todo 教程 入门仪式:Hello Vue - Vue 2.x Todo 教程 在学习django-rest-framework时收集的学习资料推荐 - 追梦人物的博客 区块链理论与应用研究小组成员招募书 - 追梦人物的博客 Python界网红,豆瓣工程师董伟明加了我的QQ后 - 追梦人物的博客 招募Django学习小组项目组核心成员 - 追梦人物的博客
uv 替代 pyenv + pipx + poetry 环境管理实践
2025-07-11 · via 追梦人物的博客

之前一直使用 pyenv + pipx + poetry 的组合方案管理 Python 版本和虚拟环境,最近在体验了一段时间 uv 后,逐步把所有的 Python 项目都迁到 uv 了,迁移过程也很丝滑。这篇博客文章分享一些个人在迁移至 uv 过程中总结的一些经验,希望能帮助到有这个需求的同学。

安装

安装过程就不细说了,可以参考 官方文档 的说明。
我的开发环境是 Windows 11 + WSL,Shell 是 zsh,👇是我安装 uv 的过程:

# 安装
wget -qO- https://astral.sh/uv/install.sh | sh

# 如果使用👆的方式安装,则用👇的命令更新
uv self update

# 命令补全
echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc
echo 'eval "$(uvx --generate-shell-completion zsh)"' >> ~/.zshrc

# 卸载
uv cache clean
rm -r "$(uv python dir)"
rm -r "$(uv tool dir)"
rm ~/.local/bin/uv ~/.local/bin/uvx

替代 pyenv

之前一直使用 pyenv 管理不同 Python 版本,uv 相应的命令如下:

# 安装 Python 3.12
uv python install 3.12

# 安装到全局环境,会将 Python 可执行程序放到 ~/.local/bin 路径下
uv python install 3.12 --preview --default

离线安装 Python

因神秘力量的干扰,uv python install 可能无法从网络上下载 Python 安装包,可以通过下面的方式离线安装:

# 先手动下载指定的 Python 安装包(这里只是示例,根据实际情况替换安装包的 URL)
wget https://github.com/astral-sh/python-build-standalone/releases/download/20250317/cpython-3.12.9%2B20250317-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz

# 通过环境变量指定安装包所在路径并安装
UV_PYTHON_INSTALL_MIRROR=file:///mnt/nvme2/download uv python install 3.12

pyenv 的卸载方式:

执行完 rm 命令后最好是关闭终端再打开一下。

替代 pipx

pipx 通常用来安装一些 Python 开发的命令行工具,好处是隔离各个工具的执行环境。uv 对应的工具是 uv tool(大部分情况下可简写为 uvx),用法:

# 独立的环境安装 ruff,直接使用 ruff 命令
uv tool install ruff

# 增加其他依赖
uv tool install mkdocs --with mkdocs-material

# 更新安装的工具
uv tool upgrade ruff
uv tool upgrade --all

pipx 的卸载方式:

  • 先通过 pipx uninstall xxx 删除安装的包
  • 如果通过 pip list | grep pipx 检查到 pipx 是通过 pip 安装的,则可以直接卸载:pip uninstall pipx
  • ~/.local/share/pipx 下可能还有一些残留,清理掉即可

替代 poetry

从 poetry 项目迁移

新建项目

# 新建项目
uv init my_project

# 或者新建项目时指定 Python 版本
uv init my_project --python 3.12

# 或者先创建项目文件再初始化
mkdir my_project
cd my_project
uv init

管理依赖

# 添加依赖
uv add requests

# 移除依赖
uv remove requests

# 更新依赖
uv lock --upgrade-package requests

克隆了 uv 管理的项目,类似于 poetry install,执行 sync 命令创建虚拟环境和安装依赖一步到位:

uv sync

# 不把当前 project 装进去
uv sync --no-install-project

导出 requirements.txt
类似于 poetry export,使用👇命令导出 requirements.txt 文件:

uv export --format requirements-txt -o requirements.txt --frozen

使用 pip

uv 不再用 pip,直接用 uv 环境中的 pip 会报错。大部分情况下应该坚持使用 uv 管理依赖,但有时候确实需要使用 pip 时,则可以用 uv pip 代替:

uv pip install -r requirements.txt

如果虚拟环境已经创建好了,希望 uv pip 将依赖装到这个虚拟环境里,则可以通过环境变量指定虚拟环境的位置:

VIRTUAL_ENV=.venv uv pip install -r requirements.txt

我需要 pip 的场景一般是使用 ansible 在服务器部署项目,这是对应的 ansible task 申明方式:

- name: Install requirements using uv pip
  ansible.builtin.command:
    chdir: "{{ proj_repo }}"
    cmd: "{{ uv }} pip install -r requirements.txt --python 3.12"
  environment:
    # https://docs.astral.sh/uv/pip/environments/#discovery-of-python-environments
    VIRTUAL_ENV: "{{ venv_path }}"

安装 ansible

uv 安装 ansible 没有 pipx 方便,主要是它不会在 ~/.local/bin 下创建 ansible 各个工具的软连接,暂时参考 这个 issue 解决:

uv tool install ansible

[ -d "$(uv tool dir)/ansible/bin/" ] && find "$(uv tool dir)/ansible/bin/" -mindepth 1 -maxdepth 1 -type f -executable -regextype posix-extended -regex '^((.+/)?)[^.]+' -print0 | xargs -0 ln -s -t "${HOME}/.local/bin/"

总结

从目前的使用体验来看,uv 基本可以替代掉传统的 Python 环境管理工具了,而且速度确实嘎嘎的快,非常香!

-- EOF --