开发基础工具 —— Conda、Pip/UV 与 Git 实战手册 - Clear Eyes, Full Heart
LOADING
2526 words
13 minutes
开发基础工具 —— Conda、Pip/UV 与 Git 实战手册

开发基础工具


Conda

管理环境

  • 创建新环境

    • conda create -n env_name python=3.10:创建名为env_name、Python版本为3.10的环境。
    • conda create -n env_name python=3.10 -c conda-forge:从conda-forge频道创建环境(AI包更全)。
  • 激活环境 conda activate env_name:激活env_name环境。

  • 退出环境 conda deactivate:退出当前激活的环境。

  • 列出所有环境 conda env listconda info --envs:显示所有可用环境。

  • 删除环境 conda remove -n env_name --all:删除名为env_name的环境。

  • 复制环境 conda create -n new_env --clone old_env:克隆一个现有环境。

  • 导出环境

    • conda env export > environment.yml:导出包含确切版本和来源的完整环境(跨平台性较差)。
    • conda env export --from-history > environment.yml:仅导出你明确指定的包(跨平台性更好)。
  • 从文件创建环境 conda env create -f environment.yml:根据 environment.yml 创建新环境。

管理包

  • 安装包

    • conda install package_name:在当前环境中安装package_name
    • conda install numpy pandas matplotlib:一次性安装多个包。
  • 更新包 conda update package_name:将package_name更新到最新版本。

  • 移除包 conda remove package_name:卸载package_name

  • 列出已安装包 conda list:列出当前环境中已安装的包。

  • 搜索包 conda search package_name:搜索可用的包。

  • 清理Conda conda clean --all:清理缓存(下载的包缓存、索引等),释放磁盘空间。

  • 更新Conda

    • conda update conda:更新conda本身。
    • conda update --all:更新当前环境中所有包(可能引起依赖冲突,需谨慎)。

Pip & UV

uv 提供了一个与 pip 完全兼容的接口,可以作为 pip 的“即插即用”替代品,速度提升 10-100 倍 。以下所有 pip 命令都可用 uv pip 替换,以获得性能提升。

管理包

  • 安装包

    • pip install package_name:安装package_name
    • uv pip install package_name:使用 uv 安装,速度更快。
  • 从 requirements 文件安装

    • pip install -r requirements.txt:根据requirements.txt文件安装包。
    • uv pip install -r requirements.txtuv 的等价命令。
  • 从 Git 仓库安装 pip install git+https://github.com/user/repo.git:直接从 Git 仓库安装(常用于安装未发布的库或特定分支)。

  • 可编辑模式安装 pip install -e .:在当前目录下以“可编辑”模式安装项目。对正在开发的包非常有用,修改源码后无需重新安装即可生效。

  • 升级包 pip install --upgrade package_name:升级package_name到最新版本。

  • 卸载包 pip uninstall package_name:卸载package_name

  • 列出已安装包

    • pip list:列出已安装的包。
    • uv pip listuv 的等价命令。
  • 查看可用更新 pip list --outdated:查看有哪些包有更新版本。

  • 显示包信息 pip show package_name:显示package_name的详细信息(版本、依赖、安装路径等)。

  • 冻结当前环境的包

    • pip freeze > requirements.txt:将当前环境中所有通过 pip 安装的包及其版本输出到requirements.txt
    • uv pip freeze > requirements.txtuv 的等价命令。

UV

uv 是一个用 Rust 编写的极速 Python 包和项目管理器,旨在替代 pippip-toolspipxpoetrypyenvvirtualenv 等工具 。它提供了一个统一的命令行界面来完成所有 Python 项目相关的任务。

基本结构文件

Terminal window
# 项目结构
# ├── .venv/ # 虚拟环境(自动创建)
# ├── pyproject.toml # 项目配置
# ├── uv.lock # 依赖锁定文件
# └── main.py # 入口文件
  • .venv/ - 虚拟环境目录,存放项目独立的 Python 解释器和已安装的包

    • 每个项目有自己的虚拟环境,避免包冲突,由 uv 自动创建和管理,通常不需要手动操作
    • 可以随时删除重建(uv venv 重新创建),添加到 .gitignore,不需要提交到 git
  • pyproject.toml - 项目配置文件(核心),定义项目元数据、依赖、构建配置等

    • 现代 Python 项目的标准配置文件,替代了 setup.pyrequirements.txtsetup.cfg 等,由 uv 维护,但可以手动编辑
    • 基础格式:
      [project]
      # 项目基本信息
      name = "my--project"
      version = "0.1.0"
      description = "Description"
      authors = [
      {name = "Your Name", email = "you@example.com"}
      ]
      requires-python = ">=3.8"
      dependencies = [
      "torch>=2.0.0",
      "numpy>=1.24.0",
      "pandas>=2.0.0",
      "transformers>=4.30.0",
      ]
      [project.optional-dependencies]
      # 可选依赖组
      dev = [
      "pytest>=7.0.0",
      "black>=23.0.0",
      "jupyter>=1.0.0",
      ]
      gpu = [
      "cudatoolkit>=11.7",
      ]
      [build-system]
      requires = ["hatchling"]
      build-backend = "hatchling.build"
      [tool.ruff]
      # 代码检查工具配置(可选)
      line-length = 88
      [tool.black]
      # 代码格式化工具配置(可选)
      line-length = 88
  • uv.lock - 依赖锁定文件,锁定所有依赖的精确版本和哈希值

    • 自动生成,不要手动编辑,包含所有依赖(包括间接依赖)的精确版本
    • 确保团队或部署环境使用完全相同的依赖,比 requirements.txt 更可靠
    • 应该提交到 git,确保环境一致性

项目管理

  • 初始化新项目

    • uv init project_name:创建一个新的 Python 项目,生成 pyproject.tomlREADME.md.gitignore 等文件 。
    • cd project_name:进入项目目录。
  • 创建虚拟环境

    • uv venv:在当前目录创建虚拟环境 (默认为 .venv)。uv 会自动管理它 。
    • uv venv --python 3.11:使用指定 Python 版本创建虚拟环境 。
  • 激活/退出虚拟环境

    Terminal window
    # 激活 (macOS/Linux)
    source .venv/bin/activate
    # 激活 (Windows)
    .venv\Scripts\activate
    # 退出
    deactivate
  • 添加依赖

    • uv add requests:添加 requests 到项目依赖,并更新 pyproject.tomluv.lock
    • uv add 'numpy>=1.20,<2.0':添加指定版本的依赖。
    • uv add pytest --dev:将 pytest 添加为开发依赖 。
  • 移除依赖 uv remove requests:从项目中移除 requests

  • 同步依赖

    • uv sync:根据 pyproject.tomluv.lock 文件,安装或更新项目的所有依赖,确保环境完全一致 。
    • uv sync --locked:仅当 uv.lock 文件未更改时才同步,用于 CI 环境确保可重复性 。
  • 生成锁定文件

    • uv lock:生成或更新 uv.lock 文件,精确锁定所有依赖的版本 。
    • uv lock --upgrade-package requests:仅升级 requests 并更新锁定文件 。
  • 运行项目脚本

    • uv run main.py:在项目的虚拟环境中运行 main.py(无需手动激活环境)。
    • uv run ruff check:在项目环境中运行已安装的工具 。

Python 版本管理

  • 安装指定Python版本 uv python install 3.12 3.11:安装 Python 3.12 和 3.11 。

  • 列出可用/已安装版本 uv python list:列出所有可用的或已安装的 Python 版本 。

  • 固定项目Python版本 uv python pin 3.11:将当前项目使用的 Python 版本固定为 3.11 。

  • 查找当前Python uv python find:显示当前使用的 Python 解释器路径 。

工具管理

  • 运行一次性工具 (无需安装) uvx ruff check .uvxuv tool run 的别名,在一个临时隔离环境中运行 ruff,用完即弃 。

  • 安装全局工具

    • uv tool install ruff:将 ruff 安装为全局可用的工具(类似于 pipx)。
    • uv tool run ruff check .:运行已安装的全局工具。

Git

官方文档——Pro Git

仓库状态与更新

  • 查看仓库状态 git status:查看当前仓库状态,了解未提交的更改和未跟踪的文件。

  • 查看远程更新 git fetch:从远程仓库获取更新,但不合并到本地。

    • 之后可使用git diff origin/main查看与远程主分支的差异。
  • 拉取更新

    • git pull:获取远程仓库的更新并合并到当前分支(通常是git fetch + git merge)。
    • git pull --rebase:获取远程更新,然后用当前分支的提交在远程分支之上“重演”,保持提交历史线性整洁。

常用 Git 命令

  • 克隆仓库

    • git clone https://github.com/user/repo.git:将远程仓库克隆到本地。
    • git clone --depth 1 https://github.com/user/repo.git:浅克隆,只下载最新的提交历史,对于大型项目(如某些AI模型库)可以大大加快速度。
  • 添加更改

    • git add file:将file的更改添加到暂存区。
    • git add .:将当前目录下的所有更改(包括新文件和修改)添加到暂存区。
    • git add -u:仅将已跟踪文件的更改添加到暂存区。
  • 提交更改

    • git commit -m "commit message":提交暂存区的更改并添加提交信息。
    • git commit -a -m "commit message":跳过git add,直接提交所有已跟踪文件的更改。
  • 查看差异

    • git diff:查看工作目录和暂存区之间的差异。
    • git diff --staged:查看已暂存的更改与上次提交之间的差异。
    • git diff HEAD..origin/main:查看本地分支和远程 main 分支之间的差异(先执行 git fetch origin)。
  • 撤销更改

    • git restore file:**【新方式】**丢弃工作目录中对file的修改(替代git checkout -- file)。
    • git restore --staged file:**【新方式】**将文件从暂存区移回工作目录(取消暂存,替代git reset HEAD file)。
    • git commit --amend -m "new message":修改最近一次提交的提交信息或包含新的更改。
    • git reset --hard HEAD~1:彻底删除最近一次提交,回到之前的状态(慎用,不可逆)。
  • 推送更改

    • git push origin branch_name:将本地分支推送到远程仓库。
    • git push -u origin branch_name:首次推送本地新分支到远程,并建立关联关系,后续可直接用git push
  • 查看提交日志

    • git log:查看详细的提交历史记录。
    • git log --oneline --graph --all -n 5:以单行、图形化方式查看所有分支的最近5次提交,非常直观。
  • 分支管理

    • git branch:列出本地所有分支。
    • git branch -a:列出所有本地和远程分支。
    • git switch -c new_branch:**【新方式】**创建并切换到new_branch分支(比checkout -b语义更清晰)。
    • git switch new_branch:**【新方式】**切换到已存在的new_branch分支。
    • git merge branch_name:将branch_name合并到当前分支。
    • git branch -d branch_name:删除本地分支。
    • git push origin --delete branch_name:删除远程分支。
  • 储藏更改

    • git stash:暂时保存当前未提交的更改,使工作目录变得干净。
    • git stash pop:重新应用最近一次储藏的更改,并从储藏列表中删除。
    • git stash apply:重新应用储藏的更改,但不从列表中删除。
    • git stash list:查看所有储藏记录。

配置

  • 设置全局用户名和邮箱

    • git config --global user.name "Your Name":设置用户名。
    • git config --global user.email "you@example.com":设置邮箱。
  • 设置默认分支名 git config --global init.defaultBranch main:将新仓库的默认分支名设置为main

  • 查看配置信息 git config --list:列出所有Git配置。


开发基础工具 —— Conda、Pip/UV 与 Git 实战手册
/posts/basic_knowledge/basic_tools/
Author
Zhang Haoyi
Published at
2025-06-28
License
CC BY-NC-SA 4.0
分享:

Some information may be outdated

Directory
Albums
Diary
Posts
Projects
Skills
Timeline
Categories
Tags
Table of Contents