【python】环境隔离方案

venv(官方内置)

内置的虚拟环境工具,无需额外安装。

创建虚拟环境:

1
2
3
4
5
# python -m venv <venv-name> 可自定义虚拟环境名称,建议使用 .venv 作为默认名称
python -m venv .venv

# 如安装多个版本的python,可指定 python 版本创建虚拟环境
python3.9 -m venv .venv

激活虚拟环境:

1
2
3
4
5
# windows:
.venv\Scripts\activate

# linux:
source .venv/bin/activate

退出虚拟环境:

1
deactivate

导出项目依赖标准文件:

1
2
# 使用 requirements.txt 记录和复现项目环境
pip freeze > requirements.txt

按照 requirements.txt 安装项目依赖:

1
pip install -r requirements.txt

查看是否生效

1
2
3
4
5
6
7
8
# 查看 Python 路径,应指向 .venv 目录
# Windows
where python
# macOS/Linux
which python

# 或者查看pip包依赖区分
pip list

conda

conda下载分为 Anaconda/Miniconda。

Anaconda:安装包大,预装了很多库,有图形界面,启动慢。

Miniconda:安装包小,没有预装库,没有图形界面,启动快。

官网首页:
https://www.anaconda.com/

官网下载:
https://www.anaconda.com/download/success

官网命令行文档:
https://docs.conda.io/projects/conda/en/stable/commands/index.html

创建虚拟环境

1
2
3
conda create -n <env-name>
# 或指定 python 版本
conda create -n <env-name> python=3.9.15

激活虚拟环境

1
conda activate <env-name>

退出虚拟环境

1
conda deactivate

查看已创建的虚拟环境

1
conda env list

删除虚拟环境

删除需要先退出该虚拟环境

1
2
3
4
5
# 推荐
conda env remove -n <env-name>

# conda remove 特殊用法,加上 --all 也可删除整个虚拟环境
conda remove -n <env-name> --all

conda env remove 和 conda remove 区别:

  • conda env remove:专门、直接地删除整个虚拟环境
  • conda remove:从指定环境中删除一个或多个软件包
    1
    2
    3
    4
    5
    # 从当前激活环境中删除 numpy
    conda remove numpy

    # 从指定环境 (myenv) 中删除多个包
    conda remove -n myenv <package-name1> <package-name2>

包管理相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装包(可使用 -c 参数指定从哪个channel下载:`-c conda-forge` 从 conda-forge 下载)
conda install <package-name>
conda install -c conda-forge <package-name>

# 卸载包 uninstall 是 remove 的别名
conda remove <package-name>
conda uninstall <package-name>

# 导出依赖配置文件
# 4.14 版本以下,只支持导出 YAML 格式
conda env export > environment.yml
# 4.14 版本以上,支持更多格式(YAML/JSON/ 显式列表 /requirements.txt)
conda export > environment.yml

# 从 environment.yml 创建虚拟环境(-f 参数指定环境配置文件,默认是:environment.yml)
conda env create -f environment.yml

镜像源:

1
2
3
4
5
6
7
8
9
10
#设置清华镜像
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/main/
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/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes

windows 下,关闭自动激活 base 环境,不然每次打开 powershell 都会自动激活 base 环境

1
2
3
4
# 关闭自动激活 base 环境
conda config --set auto_activate false
# 和上面一样 auto_activate_base 是 auto_activate 的别名
conda config --set auto_activate_base false

virtualenv(已经基本用不上了)

第三方工具,需要额外安装。

pip install virtualenv

https://github.com/pypa/virtualenv

https://virtualenv.pypa.io

uv

Python 版本和项目包管理工具,类似 node 的 nvm + npm。

https://github.com/astral-sh/uv

https://docs.astral.sh/uv/

python版本管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装 Python 版本(不指定版本号,默认安装最新版本,可指定多个版本号)
uv python install <python-version> <python-version>

# 卸载 Python 版本
uv python uninstall <python-version>

# 查看可用和已安装的 Python 版本
uv python list

# 查找已安装的 Python 版本
uv python find

# 将当前项目固定使用特定 Python 版本
uv python pin <python-version>

项目管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 创建新 Python 项目,可指定 Python 版本
# 当前目录创建项目,项目名称为当前目录名
uv init
uv init --python <python-version>
# 指定项目名称
uv init <project-name>
uv init <project-name> --python <python-version>

# 为项目添加依赖
uv add <package-name>

# 从项目移除依赖
uv remove <package-name>

# 同步项目依赖到环境(根据 pyproject.toml 和 uv.lock 安装所有依赖)
uv sync

# 为项目依赖创建锁文件
uv lock

# 在项目环境中运行命令
uv run <command>

# 查看项目依赖树
uv tree

# 构建项目为分发包
uv build

# 发布项目到包索引
uv publish