Python虚拟环境
type
Post
status
Published
summary
虚拟环境的作用就是将不同项目所需的环境进行隔离,互不影响。虚拟环境的管理有很多方法,最常用的是使用condo来管理虚拟环境。
slug
python-virtual-environment
date
Apr 17, 2020
tags
虚拟环境
python基础
category
基础知识
password
icon
URL
Property
Feb 28, 2024 01:10 PM
为什么使用虚拟环境?
- 不同项目可能使用的python版本不一样
- 不同项目使用的第三方包的版本可能也不一样
虚拟环境的作用就是将不同项目所需的环境进行隔离,互不影响。
一、Python版本管理
brew install pyenv # 使用 Homebrew 安装(macOS) curl https://pyenv.run | bash # 安装脚本(Linux 或没有 Homebrew) # 或者手动安装(参考 https://github.com/pyenv/pyenv ) # 设置 shell 环境变量(在 ~/.bashrc / ~/.zshrc 中添加以下内容) export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv init -)" pyenv install 3.10.13 # 安装 Python 3.10.13 pyenv install 3.9.18 # 安装 Python 3.9.18 pyenv versions # 列出当前系统中通过 pyenv 安装和管理的所有 Python 版本,以及当前处于激活状态的版本。 pyenv version # 显示当前 shell 的 Python 版本 pyenv global 3.10.13 # 设置为全局默认版本 pyenv global system # 恢复为系统默认 Python pyenv shell 3.9.18 # 设置当前 shell 会话的 Python 版本(临时)仅当前会话有效 pyenv local 3.9.18 # 设置指定目录的 Python 版本(项目级)在项目目录下创建 .python-version 文件,指定版本 pyenv uninstall 3.9.18 # 卸载指定版本的 Python pyenv doctor # 使用 pyenv-doctor 插件检查安装状态 pyenv rehash # 刷新;如果切换 Python 版本后,仍然找不到版本
二、虚拟环境管理
2.0、常用国内镜像源
- 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云:https://mirrors.aliyun.com/pypi/simple
- 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple
- 华中理工:https://pypi.hustunique.com/simple
- 豆瓣:https://pypi.douban.com/simple
2.1 使用 Python自带的 venv 管理
### 1. 虚拟环境的创建与激活 python -m venv .venv # 创建虚拟环境,目录为 .venv(推荐命名),适用于 macOS/Linux/Windows python3.9 -m venv .venv # 使用指定版本的 Python 创建环境(系统中需已安装该版本) source .venv/bin/activate # 激活虚拟环境(macOS/Linux) which python # 确认是否进入虚拟环境(macOS/Linux) .venv\Scripts\activate # 激活虚拟环境(Windows) where python # 确认是否进入虚拟环境(Windows) deactivate # 退出虚拟环境 rm -rf .venv # 删除虚拟环境(直接删除对应目录即可) # 建议:项目中使用 git 时应将 .venv 添加进 .gitignore 文件中,以避免提交本地环境依赖 ### 2. 包的安装、管理与升级 pip install package_name # 安装指定包 pip install package_name==1.0.0 # 安装指定版本 pip install -U package_name # 升级包到最新版(等价于 --upgrade) pip install -qU package_name # 升级包并静默输出(quiet 模式) pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name # 指定安装源(如清华镜像) pip install "fastapi[standard]" # 安装附带额外可选依赖的包(extra requirements)安装 fastapi 的同时还会安装名为 standard 的额外依赖(是一个列表,列表中有多个依赖包),具体有哪些可以在包对应的 GitHub 仓库的 pyproject.toml 文件中查看;pyproject.toml 文件中都有什么?详见这里 pyproject.toml python -m pip install --upgrade pip # 升级 pip(解决许多依赖问题的通用方式) ### 3. 包信息查看与管理 pip list # 查看当前环境已安装的所有包 pip list --outdated # 列出所有有可更新版本的包 pip index versions requests # 查看某包可用的所有版本(需 pip ≥ 21.2) pip index versions requests -i https://pypi.tuna.tsinghua.edu.cn/simple # 查看指定源中有哪些版本 pip show package_name # 查看某个已安装包的详细信息(路径、版本、依赖等) ### 4. 环境迁移与兼容建议 pip freeze > requirements.txt # 导出当前环境下已安装的包及版本,供部署使用 pip install -r requirements.txt # 根据 requirements.txt 批量安装依赖包 pip install wheel setuptools # 安装构建工具,避免某些包安装失败 # pip 不支持直接解析 Conda 的 yml 文件,建议在纯 pip 项目中使用 requirements.txt 管理依赖 # 第三方依赖导出 pipreqs(根据项目中实际导入的 Python 模块 自动生成 requirements.txt;生成最小依赖集(只含项目实际用到的)) # 安装 pip install pipreqs # 导出 pipreqs ./ --encoding='utf-8' --force --scan-notebooks # --scan-notebooks 参数针对.ipynb 文件 pipreqs ./ --encoding='utf-8' --force --ignore .history --scan-notebooks # 扫描时建议忽略 .history 文件,否则容易导致报错 pipreqs ./ --encoding='utf-8' --force --ignore .history,venv,env # # 忽略多个文件夹 pipreqs ./ --encoding='utf-8' --force --ignore ".history,venv,env,__pycache__,logs,data" """ ./:表示扫描当前目录(默认只会扫描.py文件), --encoding:生成文件的编码方式 --force 强制执行,目录下已经存在requirements.txt时覆盖 --scan-notebooks:扫描 .ipynb 文件 """
2.2、 使用conda管理
conda安装
- 首次安装:‣
- 更新 conda:
conda update -n base -c defaults conda
conda update
:表示“更新某个包”-n base
:指定更新的是base
环境(conda 默认安装环境)-c defaults
:使用defaults
频道(Anaconda 官方默认源)conda
:要更新的包,这里是conda
自己(即更新 conda 管理器本体)
多版本切换
conda包管理工具有anaconda、miniconda、miniforge;
前两个个人使用是免费的,miniforge是社区开源免费的。如果同时安装了miniconda和miniforge,则可以通过以下方法进行conda命令的切换:
切换命令
- 从 anaconda 切换到 miniforge:
../miniforge3/bin/conda init zsh
- 从 miniforge 切换到 anaconda:
../opt/miniconda3/bin/conda init zsh
注:文件路径需要根据自己的情况修改;
执行完上述切换命令之后记得重启 shell 才能成功切换(在vscode中需要手动中断中断(重新加载页面不管用))。
conda使用
### 1.虚拟环境的创建与激活 conda create -n envname # 可能会创建空的环境(没有python,没有其他包), conda create -n envname python=3.9.0 # 指定python版本;创建虚拟环境时最好先指定python的版本,不然默认最新版本 conda create -n envname python=3.9.0 -y # 指定python版本;并自动确认安装过程; conda create -n envname python=3.9.0 -c conda-forge # -c 新增安装包时的搜索通道,conda-forge是一个常用的第三放通道 conda env create -f environment.yml # 根据 yml 文件创建一个新的 Conda 虚拟环境,并自动安装文件中指定的所有依赖。 # yml 文件内容如下:name(新环境的名称)、channels(使用的 Conda 仓库源)、dependencies(要安装的包及版本) conda activate envname # 激活(进入)指定的虚拟环境 conda deactivate # 退出当前虚拟环境,不用加虚拟环境名字 conda remove -n envname --all # 删除一个已有环境 # arm64的mac不能安装3.8之前的python虚拟环境(镜像源中没有3.7之前的python包,换其他源也没有) ### 2. 包的安装和更新 conda install numpy # 安装一个包 conda install python=3.10.16 # 更改Python 版本 conda install numpy=1.21.0 # 安装一个指定版本的包;也可以用来更新或倒退到指定版本 conda install -n envname numpy # 指定虚拟环境安装一个包 conda install -y --file requirements.txt # (不推荐)批量安装txt文件中的包,并自动确认;Conda 会尽可能使用 conda 仓库中的包,但如果包是 pip 专属的,可能会出错 conda update numpy # 更新单个包到最新版本 conda update --all # 更新所有已安装包到最新版本 conda list | grep numpy # 查看当前安装的numpy版本 conda search --outdated # 检查已安装包的可更新的所有版本 - search会列出版本号和构建号,不用纠结构建号,直接安装想要的版本即可。 - 如果想精确使用构建号安装:conda install pytorch==2.3.1=gpu_mps_py39h7b7e308_100 -c pkgs/main conda search numpy # 查找可用的numpy信息 ### 3. 环境导出与迁移 conda env export > environment.yml # 将当前环境导出为 yml 文件(包括包及版本) conda list --export > requirements.txt # 将当前环境导出为纯文本格式(每行一个包=版本),适用于conda install -f conda env export --no-builds > environment.yml # 忽略构建号导出,提升兼容性 conda env update --file environment.yml # 使用 yml 文件更新已有环境(自动添加/更新缺失包) conda env remove -n envname # 删除环境(同 remove --all 效果) ### 4. 查看、配置、管理通道 conda config --show # 查看当前 conda 配置 conda config --add channels conda-forge # 添加 conda-forge 通道(优先级靠后) conda config --set channel_priority strict # 设置严格通道优先级(推荐,避免包冲突) conda config --remove channels conda-forge # 移除已添加的通道 ### 5. 其他命令 conda info -e # 查看所有虚拟环境 conda env list # 查看所有虚拟环境 conda list # 查看当前环境下已安装的所有包 conda list -n envname # 查看某个指定环境的已安装的所有包 conda create -n new_name --clone old_name # 克隆一个虚拟环境;常用在环境备份、虚拟环境重命名(克隆之后删除原环境) conda clean --all # 用于清理 conda 缓存的命令;当遇到包安装问题时、当需要解决包冲突时 conda clean --index-cache # 只清理索引缓存 conda clean --packages # 只清理未使用的包 conda clean --tarballs # 只清理压缩包缓存 conda clean --lock # 只清理锁定文件 conda install somepkg --dry-run # 预演安装过程,不真正安装,可提前发现冲突 conda create -n testenv python=3.10 somepkg --dry-run # 预演新环境创建,查看冲突信息 # 永久配置 Conda 使用清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/simpleitk conda config --set show_channel_urls true conda info
2.3、使用poetry管理
使用poetry管理项目首先需要对项目进行初始化,如果是对已有项目进行初始化则使用 poetry init ,如果是需要新建一个项目则使用 poetry new project_name ;新建项目会生成对应的项目目录和pyproject.toml文件,poetry init 只会创建 pyproject.toml 文件,不会生成其他目录结构。pyproject.toml 文件,包含:1、项目基本信息(名称、版本、描述等);2、Python 版本要求;3、依赖管理配置。
项目初始化完成后进行虚拟环境管理;第一次执行 poetry shell 时会:1、检查是否存在对应的虚拟环境;2、如果不存在,则创建新的虚拟环境;3、然后激活这个新创建的虚拟环境。以后执行 poetry shell 时会:直接激活已存在的虚拟环境;
### 1. 安装与初始化项目 # 安装 poetry(推荐使用官方脚本) curl -sSL https://install.python-poetry.org | python3 - # 安装最新版 # 或手动安装:参考 https://python-poetry.org/docs/#installation poetry --version # 查看 Poetry 版本 poetry self update # 更新 poetry 本体 # 初始化项目并创建 pyproject.toml poetry init # 交互式初始化,通常针对已有的项目;只会创建 pyproject.toml 文件,不会生成其他目录结构。 poetry new myproject # 创建一个带基本结构的新项目(myproject/) # - 自动生成标准的 Python 项目结构 project_name/ ├── pyproject.toml # Poetry 的项目配置文件,包含项目信息和依赖 ├── README.md # 项目说明文档 ├── project_name/ # 源代码目录 │ └── __init__.py # Python 包初始化文件 └── tests/ # 测试目录 └── __init__.py # 测试包初始化文件 # - 创建 pyproject.toml 文件,包含: - 项目基本信息(名称、版本、描述等) - Python 版本要求 - 依赖管理配置 # - 初始化 Git 仓库(如果目录中没有) # 在已有项目中启用 poetry 管理(自动创建虚拟环境) poetry install # 根据 pyproject.toml 安装依赖并创建虚拟环境 poetry shell # 激活 Poetry 自动创建的虚拟环境 deactivate # 退出虚拟环境(标准方式) poetry env list # 查看所有关联虚拟环境 poetry env info # 查看当前项目虚拟环境详细信息 poetry env use python3.10 # 为当前项目指定 Python 版本(需要该版本已安装) poetry env remove <env-path-or-name> # 删除某个环境 ### 2. 添加、管理依赖 poetry add requests # 添加普通依赖包,自动写入 pyproject.toml poetry add requests@^2.25 # 添加指定版本依赖(支持语义版本:^、~、>=) poetry add "fastapi[all]" # 添加 fastapi 及其 extra 依赖(如 async、httpx) poetry remove requests # 移除依赖包,更新 pyproject.toml 和 lock 文件 poetry update # 更新所有依赖 poetry update numpy # 更新指定依赖 poetry lock # 手动重新生成 poetry.lock 文件 ### 3. 开发依赖、测试依赖 poetry add --dev black # 添加开发依赖(仅开发中使用) poetry add --group test pytest # 添加 test 分组依赖(Poetry ≥1.2 支持) poetry install --with test # 安装包括 test 分组依赖 poetry install --without dev # 安装时排除开发依赖 poetry install --only main # 只安装主依赖 ### 4. 发布与构建包 poetry build # 构建源码包(.tar.gz)和 wheel 包(.whl) poetry publish # 发布到 PyPI(需要设置 token) poetry config pypi-token.pypi your-token # 配置 PyPI 的 API token(用于自动发布) poetry config repositories.<name> <url> # 添加其他 PyPI 镜像源(如私有源) # 示例:使用清华源安装依赖 poetry config repositories.tuna https://pypi.tuna.tsinghua.edu.cn/simple poetry add numpy --source tuna # 指定从 tuna 镜像源安装 numpy ### 5. 常用设置与信息查看 poetry show # 查看项目中安装的所有依赖 poetry show --tree # 以依赖树形式显示依赖关系 poetry show requests # 查看某个包的详细信息 poetry run python script.py # 在 Poetry 环境中运行 Python 脚本 poetry run pytest # 在虚拟环境中执行 pytest poetry run jupyter notebook # 启动 Jupyter(需先 add jupyter) # 在 pyproject.toml 中配置 scripts # 如:在 [tool.poetry.scripts] 中添加: # greet = "mypkg.scripts:greet" poetry run greet # 执行自定义命令 ### 6. 清理缓存和锁文件 poetry cache clear pypi --all # 清理 PyPI 缓存 poetry config --list # 查看所有配置 poetry config virtualenvs.in-project true # 设置虚拟环境保存在项目根目录的 `.venv` 中 poetry check # 检查 pyproject.toml 是否有效 # 彻底删除 lock 文件并重装 rm poetry.lock && poetry install ### 7. 导出依赖为 requirements.txt(例如部署到不支持 Poetry 的环境) poetry lock # 手动生成或更新 poetry.lock,记录精确版本 poetry export -f requirements.txt --output requirements.txt # 导出为标准 pip 格式 poetry export -f requirements.txt --without-hashes > req.txt # 无 hash 导出,便于兼容某些平台 poetry export -f requirements.txt --dev > dev-requirements.txt # 包括开发依赖一并导出 # 用 pip 安装导出的 requirements.txt(迁移到非 Poetry 项目中) pip install -r requirements.txt # 迁移已有 pip 项目到 Poetry(将 requirements.txt 转为 Poetry 管理) poetry init # 初始化 pyproject.toml(交互式选择依赖) poetry add $(cat requirements.txt) # 自动读取并添加依赖(不推荐太多依赖时用) poetry install # 自动还原完整依赖和虚拟环境 poetry install --no-dev # 仅安装主依赖,跳过 dev 依赖
2.4、使用 uv 管理
使用建议
- 新项目: 强烈建议使用
uv init
初始化项目,然后使用uv add
来管理你的项目依赖。这会让你充分利用uv
的项目管理功能,确保依赖声明清晰、锁定精确,并简化后续的维护和部署。
- 现有
pip
项目迁移: 如果你的项目目前使用requirements.txt
和pip
,你可以逐步过渡。一开始,你可以直接用uv pip install -r requirements.txt
来替代pip install -r requirements.txt
以获得速度优势。如果你想拥抱pyproject.toml
的声明式管理,可以考虑使用uv init
创建pyproject.toml
,然后将requirements.txt
的内容迁移到pyproject.toml
,并使用uv add
。
### 安装 curl -Ls https://astral.sh/uv/install.sh | sh # 安装 uv(适用于 Linux/macOS) pipx install uv # 安装 uv(推荐使用 pipx 安装,确保 uv 在独立环境中) uv --version # 查看 uv 版本 ### 创建与管理虚拟环境 uv init # 在当前路径初始化项目;初始化会创建pyproject.toml、.python-version、README.md、main.py uv init dirname # 指定一个已经存在的目录进行初始化;如果目录是空的则会成功创建基本的项目结构;如果目录不为空则会继续初始化但不覆盖文件;如果目录不存在则会创建 uv venv # 当前目录下创建 .venv 虚拟环境(默认使用当前 Python 版本) uv venv -p 3.10.0 # 创建时指定 Python 版本(如果未安装,uv 会自动下载并安装),需要指定完整版本号 uv venv --python=3.10.0 # 同上,创建时指定 Python 版本 uv venv --system-site-packages # 创建环境时允许访问系统级包 rm -rf .venv # 删除当前目录下的 .venv 虚拟环境 source .venv/bin/activate # 激活虚拟环境(Linux/macOS) ./.venv/Scripts/activate # 激活虚拟环境(Windows PowerShell) ### 安装源管理 uv pip install <包名> --index-url <镜像地址> # 临时使用源 uv pip install numpy --index-url https://pypi.tuna.tsinghua.edu.cn/simple # 使用清华源安装 uv pip install -U 'mostlyai[local]' --index-url https://pypi.tuna.tsinghua.edu.cn/simple # 使用清华源安装并升级带 extras 的包 ### Python版本管理 uv python install # 安装最新版本的 Python uv python install 3.10 # 安装 Python 3.10 的最新稳定版本;如果该版本已存在,默认不会重新下载或更新 uv python install 3.10 --reinstall # 重新安装 Python 3.10 uv python install [email protected] # 安装 PyPy 3.9 uv python install 3.10 3.11 3.12 # 一次性安装多个版本 uv python list # 列出已安装的 Python 版本 uv python pin 3.10 # 将当前项目的 Python 版本锁定到 3.10;这会在当前目录创建或更新一个 .python-version 文件,内容为 3.10。 uv python pin --global 3.11 # 全局设置一个默认版本 # 现代 Python 项目通常使用 pyproject.toml 文件来管理项目元数据和依赖。你可以在 pyproject.toml 中通过 requires-python 字段指定兼容的 Python 版本范围 ```pyproject.toml [project] name = "my-awesome-app" version = "0.1.0" description = "A simple Python application" requires-python = ">=3.9,<3.13" # 指定兼容 Python 3.9 到 3.12 的版本 ``` ### 安装和更新依赖(uv 管理方式) uv pip install:临时安装(不修改依赖文件pyproject.toml 或 requirements.txt),适用快速测试某个包;一般会安装最新的版本; uv add:正式添加为依赖把依赖写入项目的 pyproject.toml 文件中(推荐用于项目开发);会根据pyproject.toml 文件的版本安装;一般推荐使用 uv add,不建议混用 ## uv pip install 和 uv add 的通用选项 --verbose / --quiet # 控制输出的详细程度。 --color # 控制是否启用彩色输出。 --cache-dir <PATH> # 指定缓存目录。 --no-cache # 禁用缓存。 --index-url <URL> # 指定 PyPI 镜像源或私有包仓库。 --extra-index-url <URL> # 指定额外的 PyPI 镜像源。 --python <PATH> # 指定要使用的 Python 解释器路径或版本(例如 uv --python 3.10 pip install requests)。 --system # 指示 uv 使用系统 Python 环境(通常不推荐,用于特殊情况)。 --no-build-isolation # 禁用构建隔离(用于处理某些复杂包的构建问题)。 --break-system-packages # 允许在系统 Python 环境中安装可能导致冲突的包(仅在 CI/容器中谨慎使用)。 uv add requests # 添加 requests 为项目核心依赖,写入 pyproject.toml 并自动安装;add 命令如果没有虚拟环境会自动创建一个再安装包 uv add "requests==2.30.0" # 添加指定版本的依赖 uv add "numpy>=1.20,<1.25" # 添加指定版本范围的依赖 uv add "mcp[cli]" # 添加带 extras 的包 uv add "httpx @ git+https://github.com/encode/httpx" # 添加 VCS URL 依赖(在 pyproject.toml 中声明) uv add pytest --group dev # 将 pytest 添加到 dev 依赖组 uv add requests --dev # 快捷方式,等同于 --group dev,添加开发依赖 uv add torch --index pytorch=https://download.pytorch.org/whl/cpu # 添加依赖并指定自定义索引源 uv add numpy pandas # 添加多个依赖(uv add 默认会更新锁文件和环境) uv add requests --optional --features=console # 添加为可选依赖,并指定 feature 名称 uv add -e ./my_package # 添加本地包为可编辑模式依赖 uv add requests --no-install # 只写入 pyproject.toml,不执行安装 uv add "requests[standard]" --pre # 添加预发布版本的标准扩展(如果包有预发布版本) uv add requests --source https://pypi.tuna.tsinghua.edu.cn/simple # 添加依赖并指定源(会写入 pyproject.toml 的 [tool.uv.sources]) uv remove requests # 卸载 requests 并从 pyproject.toml 中删除 uv remove requests --lock # 卸载后自动更新 uv.lock 文件 uv pip install fastapi # 安装一个包(语法同 pip,但速度更快) uv pip install fastapi==0.104.1 # 安装精确版本的包 uv pip install "numpy>=1.20,<1.25" # 安装指定范围内最新版本的包 uv pip install "pandas>=2.0.0rc0" # 安装最新的高于 2.0.0rc0 的稳定或预发布版本 uv pip install "requests[security]" # 安装附加可选依赖(如 extras) uv pip install "langflow[deploy,local,postgresql]" # 安装多个额外的可选依赖 uv pip install ./my_local_package # 安装本地目录下的包 uv pip install "git+https://github.com/org/repo.git#egg=packagename" # VCS URL 安装(可以通过 --tag, --branch, --rev 指定 Git 引用) uv pip install "git+ssh://[email protected]/org/repo.git@branch_name#egg=packagename" # SSH 方式的 VCS URL 安装 uv pip install "https://example.com/packages/my_package-1.0.0.tar.gz" # 直接 URL 安装 uv pip install . # 安装当前目录(本地项目包) uv pip install -e . # 安装为可编辑模式(开发中包) uv pip install -U # 升级所有当前虚拟环境中已安装的包到它们的最新兼容版本 uv pip install --upgrade # 同上 uv pip install -U fastapi # 更新指定包 fastapi 到最新版(并可能升级其依赖) uv pip install ./my_package.whl --no-deps # 安装 wheel 包但不安装其依赖 uv pip install requests -t ./libs # 将包安装到指定目录,而不是虚拟环境 uv pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask # 使用国内清华镜像源临时安装 flask uv pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple pandas # 同上,使用清华镜像源临时安装 pandas uv pip install --pre transformers # 允许安装预发布版本 uv pip install --python 3.10 requests # 在 Python 3.10 环境中安装 requests uv pip download numpy # 仅下载包,不安装 uv pip check # 检查依赖是否有冲突或不兼容 uv pip list # 查看已安装的包 uv pip list --outdated # 查看可更新的包 uv pip show fastapi # 显示包的元信息 uv pip uninstall fastapi # 卸载某个包 uv pip uninstall -y numpy pandas # 卸载多个包(自动确认) uv pip freeze > requirements.txt # 生成当前环境下的依赖列表 uv pip install -r requirements.txt # 从 requirements.txt 文件中批量安装依赖 uv pip install --force-reinstall # 强制重新安装所有包,即使它们已经存在且版本匹配 ### 依赖锁定(uv 的亮点功能之一) uv pip compile pyproject.toml # 从 pyproject.toml 锁定依赖,生成 requirements.txt(兼容 pip-tools) uv pip compile --all-extras # 锁定所有可选依赖 uv pip compile --without-urls # 生成的锁定文件中不包含 VCS URL 信息(用于更兼容不同平台或环境) uv pip sync # 根据 uv.lock 或 requirements.txt 同步环境,确保环境一致(类似 pip-sync) uv pip check # 检查依赖是否有冲突或不兼容 # uv 会自动识别 poetry、pipenv、requirements.txt 等主流格式并加速安装。 ### 运行与环境管理 uv run main.py # 自动检测 uv 管理下该项目对应的 Python 解释器执行脚本 uv run python main.py # 使用uv 管理下的 Python 解释器执行脚本 uv run python -c "print('hello uv')" # 直接用 -c 在终端执行 Python 代码 uv run pytest tests/ # 在虚拟环境中运行 pytest 测试 uv run -- python -m http.server # 分隔符:告诉 uv run,-- 之后是要执行的原始命令,不是 uv run 的参数;使用 Python 启动内置的 HTTP 服务器,默认端口为 8000,共享当前目录内容 which python # 查看当前激活的 python 路径,确认是否为 uv 环境 uv --directory /Desktop/weather run weather.py # 先切换工作目录再执行脚本 # 在运行脚本时如果不指定 Python,则判断流程如下: # 1、如果项目目录中有.venv文件夹(即 uv venv 创建过的环境):使用该虚拟环境中的 Python 解释器; # 2、如果目录中存在 pyproject.toml 且包含 [tool.uv] 或 [project] 等配置:uv 会根据该配置解析环境(或创建临时虚拟环境) # 3、uv 会使用它默认缓存/管理的 Python 版本(从 uv 的缓存中调出),而不是系统的全局 Python ### 其他常用命令 uv sync # 同步 pyproject.toml 或 requirements.txt 中的依赖;如果当前项目还没有创建虚拟环境则会自动创建 uv pip cache info # 查看缓存信息 uv pip cache remove numpy # 清理某个包的缓存 uv pip cache purge # 清除所有 pip 缓存 # 若与系统原生 pip 冲突,可在项目中始终用 `uv pip` 替代 `pip` 命令 ### uv 管理命令行工具 uv tool install pytest # 在全局安装 pytest 工具 uv tool uninstall pytest # 在全局安装 pytest 工具 ### 临时虚拟环境 uvx pytest # 创建一个临时的虚拟环境运行 pytest 工具 uv init --script main.py # 在脚本代码最前面添加环境相关的元数据,依赖信息和 Python 版本, uv run main.py # 识别环境相关的元数据,创建一个临时的虚拟环境,然后安装元数据中的依赖,然后执行脚本
2.5、对比总结和其他
依赖锁定
依赖锁定(Dependency Locking) 是指在一个项目中,将依赖包及其所有递归依赖的确切版本记录下来,以确保团队成员、CI/CD 环境或未来自己在任意时间执行安装时都能获得完全一致的依赖环境。
为什么需要依赖锁定?
- 避免“今天能跑,明天挂了”的问题(上游库版本变化造成冲突或不兼容)。
- 确保开发、测试、生产环境一致。
- 容易重现历史版本行为(如回滚 bug)。
对比总结
工具 | 类型 | 安装依赖 | 是否创建虚拟环境 | 是否锁定依赖 | 是否跨平台 | 是否支持多 Python 版本 | 多源包管理 | 可部署性(Docker) | 管理非 Python 包 |
uv | 包管理器 + 环境管理器 | ✅ 快速(Rust 加速) | ✅(自动/手动) | ✅(超快编译) | ✅ | ❌(需系统预装) | ❌ 依赖 PyPI 或代理 | ✅ 简单、高速 | ❌ |
poetry | 项目管理器(构建工具) | ✅ 支持 extras | ✅(内建) | ✅(poetry.lock) | ✅ | ✅(自动发现) | ✅(可配置 index) | ✅ 较好,兼容打包 | ❌ |
conda | 环境管理器 + 包管理器 | ✅ 使用 .tar.bz2 或 .conda | ✅(核心功能) | ❌(无锁文件) | ✅ | ✅ 自动安装 | ✅ 多通道(如 conda-forge) | ❌ 镜像大(Anaconda 库庞大) | ✅ |
总结建议
- 用 conda 管环境(特别是非 Python 的库),是科学计算和跨平台部署的主力。
- 用 poetry 管理项目、构建、版本、依赖,一体化最强。
- 用 uv 提速安装/编译过程,是
pip
的超级加速版,非常适合替代pip-tools
、pip
本身。
- 多数项目可以组合使用:poetry + uv + pyenv(或 conda 环境) 是目前比较推荐的现代开发组合。
三、虚拟环境使用
3.1、在 vscode 中如何选择虚拟环境
方法一:
- command + shift + P
- python:select interpreter
- 选择特定虚拟环境
方法二:
直接点击页面最下边的这个位置,也会弹出选择框

3.2、在 vscode 中显示双层虚拟环境
默认会出现双层虚拟环境,如下图

原因:vscode 中的 python 插件和 conda 之间的冲突,两者都会自动激活虚拟环境。
解决方法:关闭其中一个自动激活
具体操作:
# 关闭 conda 的自动激活 conda config --set auto_activate_base False
3.3、ohmyzsh 中不显示 conda 环境名称的问题
1、在
~/.zshrc
文件中查看使用了哪个主题echo $ZSH_THEME # 查看主题名称 ls ~/.oh-my-zsh/themes # 找到对应的主题文件名称
2、修改对应的主题文件
vim ~/.oh-my-zsh/themes/agnoster.zsh-theme # 以agnoster为例
3、添加内容,保存退出
# 修改 AGNOSTER_PROMPT_SEGMENTS 数组 typeset -aHg AGNOSTER_PROMPT_SEGMENTS=( prompt_conda # 添加这一行 prompt_status prompt_context prompt_virtualenv prompt_dir prompt_git prompt_end ) # ... 其他代码保持不变 ... # 在 prompt_virtualenv 函数后添加 prompt_conda 函数 # Display current conda environment prompt_conda() { if [[ -n $CONDA_DEFAULT_ENV ]]; then color=blue prompt_segment $color $PRIMARY_FG print -Pn " ($CONDA_DEFAULT_ENV) " fi } # ... 其他代码保持不变 ...
4、应用配置:
source ~/.zshrc