前言
在面对Python
不断多的版本迭代中,我们有时候需要兼容不同的环境来运行项目,所以我们得要有多个版本的运行空间,然后就有了Anaconda
和 uv
。
Anaconda
mac
环境下,可以直接通过homebrew
来实现直接安装brew install anaconda
,同时配置下对应的环境变量
bash
# anaconda
export ANACONDA_DIR=/opt/homebrew/anaconda3
export PATH=$ANACONDA_DIR/bin:$PATH
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/homebrew/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/homebrew/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/homebrew/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/homebrew/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
win
环境下,我们通过去官网下载anaconda
,官网地址:www.anaconda.com/download ,也是配置对应的环境变量,配置对应的Path
使用anaconda
- 查看环境列表,获取当前拥有的环境
bash
conda env list

- 激活指定的环境,通过环境别名,如上图我选
python38
bash
source activate python38

- 已经在当前环境下了,如果我想下载对应的依赖可以直接使用
conda install
,如果想用pip
也可以直接使用pip install
。 注意:未激活环境直接用pip
,可能安装到 base 环境或系统 Python
css
conda install [package]
pip install [package]
- 修改国内镜像源,
conda
和pip
的都统一进行修改镜像源
ruby
# 使用清华源(推荐)
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/cloud/conda-forge/
conda config --set show_channel_urls yes
注意:修改pip的镜像源,是对所有环境下的pip都会直接生效
arduino
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
查看获取当前的镜像源配置信息
lua
conda config --show channels
pip config list
-
当我想退出该环境,此时就会回到
base
环境conda deactivate

- 安装新的环境,可以通过查看可安装的指定版本,然后安装时指定版本和环境名即可
sql
# 查看可安装的
conda search python --full-name

ini
# 创建指定版本的安装 例如,指定3.12.11
conda create -n python312 python=3.12.11
uv
同理,在mac
环境下,可以直接通过homebrew
来实现直接安装
brew install uv
使用uv
-
获取对应python可用的版本
uv python list
-
创建项目和环境,指定项目名称,可以快速生成一个脚手架
此时会创建一个你指定项目名称的文件夹,包含以下文件列表
pyproject.toml
:python
项目的核心配置文件.gitignore
: git的忽略文件main.py
: 示例的主执行文件
注意: 但不会自动创建虚拟环境.venv
csharp
uv init [project项目名称]
- 指定虚拟环境
.venv
的同时创建python指定版本
css
uv venv --python 3.11 .venv
此时项目文件会多一个.venv
文件夹,里面包含bin
(可执行文件和python的内容)和lib
对应的项目依赖内容
注意: 如果你安装的版本和项目初始化时候文件指定的需求版本不一致,可能后面运行时会自动将你虚拟环境删除,安装它最需要的版本
- 添加依赖
可以使用 uv add
来添加依赖,会直接写入pyproject.toml
文件 ,注意:当用uv pip
则不会写入 pyproject.toml
文件
erlang
uv add ...
uv remove ...
uv pip install ....
uv pip uninstall ....
uv pip install -r requirements.txt # 从指定文件中安装依赖
注意: 如果感觉下载有点慢的话,可以使用添加国内镜像源来实现下载
ini
# 第一种:临时使用镜像源
uv add [依赖名称] --default-index https://pypi.tuna.tsinghua.edu.cn/simple
# 第二种:项目使用镜像源 ,在pyproject.toml文件里增加
[[tool.uv.index]]
url="https://pypi.tuna.tsinghua.edu.cn/simple"
default=true
# 第三种:全局环境变量
export UV_DEFAULT_INDEX="https://pypi.tuna.tsinghua.edu.cn/simple"
- 运行项目/python文件
在完成项目的编写和依赖添加后,需要运行项目
arduino
# 运行python文件
uv run python main.py
如果项目结构是下面这个标准的话,可以通过运行模块的形式运行
css
myproject/
├── pyproject.toml
└── src/
└── myproject/
├── __init__.py
└── cli.py
uv run python -m [项目名称]
- 激活虚拟环境
在项目中有了.venv
虚拟环境后,我们执行以下几个命令,uv
都会自动检测使用项目根目录下的.venv
arduino
uv run python main.py
uv add requests
uv sync
注意:当我们在控制台执行python
,pip
等相关命令的时候,可能用的是系统的python
而不是我们刚刚创建的虚拟环境,所以我们需要切换到这个虚拟环境中
bash
source .venv/bin/activate
所以最后还是系统推荐直接使用uv
的相关命令,不建议通过手动激活来交互python
等命令信息
退出环境/不需要
在前面有了激活环境后,如果需要退出环境,可以执行deactivate
deactivate
当你不想要这个项目时,可以直接通过删除该项目文件夹即可,因为所有的依赖,配置都在这个项目配置文件中
uv最佳实践
第一种: 通过自己手动创建文件夹,然后进入文件夹中,通过指定创建python
版本的虚拟环境
bash
mkdir python-project
cd python-project
uv venv --python 3.11 .venv
uv add ..... # 添加一些依赖
uv run python main.py
第二种: 通过命令创建项目文件夹,然后进入文件夹中,你再通过运行/添加依赖的时候自动触发安装项目中的适合的python版本(.python-version
文件和pyproject.toml
的requires-python
参数判断)的虚拟环境
csharp
uv init py-test
cd py-test
uv venv .venv # 或后面两步的 uv add/run 自动创建
uv add ....
uv run python main.py
总结
日常使用,我大多就直接用uv
,安装速度很快体积也小,兼容pypi
生态,除了在使用科学计算的情况下/非python依赖的系统级库才使用conda