使用 uv 一键创建并激活 Python 虚拟环境(附完整脚本)

简介: 本文介绍基于 `uv` 的自动化脚本 `activate_env.sh`,一键完成安装 uv、创建并激活虚拟环境、安装依赖及环境信息输出,提升 Python 项目初始化效率,适用于个人开发、团队协作与 CI/CD 场景。

使用 uv 一键创建并激活 Python 虚拟环境(附完整脚本)

在 Python 项目开发中,虚拟环境几乎是必备基础设施。它可以有效避免依赖冲突、全局环境污染,以及“在我电脑上能跑”的问题。

本文将介绍一个 基于 uv 的自动化脚本 activate_env.sh,通过一次执行完成:

  • 自动安装 uv
  • 自动创建 Python 虚拟环境
  • 自动激活虚拟环境
  • 自动安装项目依赖
  • 输出当前环境信息,便于排查问题

适用于 个人项目、团队协作以及 CI/CD 场景


一、为什么选择 uv?

uv 是 Astral 推出的新一代 Python 包管理工具,采用 Rust 编写,相比传统工具具备明显优势:

工具 特点
pip 兼容性好,但速度慢
pipenv 功能重,性能一般
poetry 功能全面,但学习成本较高
uv ⚡ 极快、兼容 pip、使用简单

选择 uv 的原因:

  • 🚀 依赖解析和安装速度极快
  • 🔄 完全兼容 requirements.txt
  • 🧱 原生支持虚拟环境管理
  • 🧰 适合逐步替换 pip,不破坏现有项目结构

二、脚本设计目标

activate_env.sh 的核心目标只有一个:

执行一次脚本,立刻进入可开发状态。

脚本解决了以下问题:

  1. 本地是否已安装 uv
  2. 项目是否已创建虚拟环境
  3. 依赖是否完整安装
  4. 如何快速确认当前环境状态

三、完整脚本:activate_env.sh

📌 建议将以下脚本直接保存为 activate_env.sh,并加入项目仓库

#!/bin/bash
# 使用 uv 安装并激活 Python 虚拟环境

set -e  # 遇到错误立即退出

echo "================================"
echo "🐍 Python虚拟环境管理"
echo "================================"

# 检查 uv 是否已安装
if ! command -v uv &> /dev/null; then
    echo "❌ uv 未安装"
    echo "📥 正在安装 uv..."
    curl -LsSf https://astral.sh/uv/install.sh | sh

    # 重新加载环境变量
    export PATH="$HOME/.cargo/bin:$PATH"

    # 再次检查
    if ! command -v uv &> /dev/null; then
        echo "❌ uv 安装失败,请手动安装:"
        echo "   curl -LsSf https://astral.sh/uv/install.sh | sh"
        exit 1
    fi

    echo "✅ uv 安装成功"
fi

# 检查虚拟环境是否存在
if [ ! -d ".venv" ]; then
    echo ""
    echo "📦 虚拟环境不存在,正在创建..."
    uv venv
    echo "✅ 虚拟环境创建成功"
else
    echo "✅ 虚拟环境已存在"
fi

# 激活虚拟环境并安装依赖
echo ""
echo "📥 检查并安装依赖..."

# 先激活虚拟环境
source .venv/bin/activate

# 安装依赖
if [ -f "requirements.txt" ]; then
    uv pip install -r requirements.txt
    echo "✅ 依赖安装完成"
else
    echo "⚠️  未找到 requirements.txt"
fi

echo ""
echo "================================"
echo "✅ 虚拟环境已激活!"
echo "================================"
echo ""
echo "当前环境信息:"
echo "  Python: $(python --version)"
echo "  位置: $VIRTUAL_ENV"
echo ""
echo "已安装的包:"
uv pip list
echo ""
echo "================================"
echo "💡 下一步:"
echo "================================"
echo ""
echo "1️⃣  激活虚拟环境:"
echo "    source .venv/bin/activate"

四、脚本执行流程说明

1️⃣ 安全退出机制

set -e

确保脚本在任意步骤失败时立即终止,避免生成不完整或不可用的环境。


2️⃣ 自动安装 uv

脚本会自动检测 uv 是否存在,若未安装则直接下载并安装,无需人工干预,适合全新环境。


3️⃣ 虚拟环境统一管理

  • 虚拟环境统一放在 .venv 目录
  • 若已存在不会重复创建
  • 支持多次安全执行

4️⃣ 依赖自动安装

  • 默认读取 requirements.txt
  • 使用 uv pip install,速度远快于 pip
  • 完全兼容现有依赖管理方式

5️⃣ 环境信息输出

脚本结束时会输出:

  • Python 版本
  • 虚拟环境路径
  • 已安装依赖列表

方便快速验证环境是否正确。


五、推荐使用方式

首次使用(项目初始化)

chmod +x activate_env.sh
./activate_env.sh

后续进入项目

source .venv/bin/activate

六、适用场景总结

✅ 新项目快速启动
✅ 团队成员环境统一
✅ 新同事零成本上手
✅ CI / 自动化环境初始化


七、可扩展方向(进阶)

你可以在此脚本基础上继续增强:

  • Python 版本校验(.python-version
  • 区分开发 / 生产依赖
  • 日志输出与调试模式
  • 公司级 Python 项目模板
  • 与 Docker / CI/CD 集成

结语

一个好的环境初始化脚本,不是为了炫技,而是为了让所有人把时间花在真正重要的事情上

activate_env.sh + uv 是一个简单、稳定、工程化的组合,非常适合作为 Python 项目的默认起手式。

相关文章
|
数据采集 JSON 算法
Python爬虫——模拟登录
Python爬虫——模拟登录
948 3
|
1月前
|
缓存 Rust 开发者
UV详解:替代pip、conda的下一代Python包与环境管理工具
UV是Astral团队推出的Rust编写的高性能Python包管理工具,旨在解决pip与conda在速度、功能割裂、环境不一致和资源冗余等方面的痛点。它集包安装、虚拟环境、依赖锁定、Python版本管理、脚本运行及打包发布于一体,兼容现有生态,安装速度快10–100倍,轻量高效,适合纯Python项目开发与团队协作。(239字)
569 8
|
4月前
|
缓存 Linux 开发者
Windows 下手动下载安装配置 uv
UV 是专为 Windows 打造的轻量命令行包管理器,仅需 uv.exe 和 uvx.exe 两个文件,无需 WSL 或管理员权限。支持一键安装、卸载、多版本切换 Python 等工具,内置依赖解析与缓存管理,搭配国内镜像更高效。绿色无残留,开发者友好,真正实现 Linux 般丝滑体验。
4271 2
|
11天前
|
缓存 项目管理 开发工具
UV实战教程,我啥要从Anaconda切换到uv来管理包?
本文对比Anaconda“手动挡”与uv“全自动挡”环境管理:uv以“项目即环境”为核心,支持`uv init`一键初始化、自动下载Python、智能依赖管理(`uv add/sync/run`)及PyCharm无缝对接,大幅提升Python开发效率与协作体验。(239字)
320 11
UV实战教程,我啥要从Anaconda切换到uv来管理包?
|
1月前
|
缓存 JSON Shell
UV 全命令速查手册
本文全面介绍 Python 包管理工具 `uv` 的核心命令,涵盖版本查询、包管理(add/install/remove/update)、虚拟环境操作、项目初始化、锁文件管理、配置设置、缓存清理及高级功能(如 run/check/fix/completions),助力高效 Python 开发。
386 7
|
1月前
|
人工智能 测试技术 API
让大模型真正为你工作:一文读懂RAG与微调的选择逻辑
本文深入解析RAG(开卷考试)与微调(封闭特训)两大私有知识注入技术:RAG实时更新、可追溯但依赖检索质量;微调风格统一、响应快但成本高、难迭代。结合实践案例与评估方法,重点推荐2024主流“混合架构”——RAG管“说什么”,微调管“怎么说”,兼顾准确性与规范性。
308 8
|
数据采集 关系型数据库 MySQL
python-协程(async、await关键字与asyncio)
python-协程(async、await关键字与asyncio)
2014 0