conda常用命令pip、venv
文章目录
- 常用命令
- 其他命令
- 其他
- Conda & pip
- Python venv
- 核心命令与步骤
- venv & Conda
常用命令
类别 | 命令 | 说明 | 示例 |
---|---|---|---|
环境管理 | conda create -n myenv | 创建新环境 | conda create -n myproject python=3.9 |
conda activate myenv | 激活进入某个环境 | conda activate myproject | |
conda deactivate | 退出当前环境 | conda deactivate | |
conda env list | 列出所有已创建的环境 | conda env list | |
conda remove -n myenv --all | 删除整个环境 | conda remove -n oldproject --all | |
conda create -n new_env --clone old_env | 克隆一个现有环境 | conda create -n proj_backup --clone myproject | |
包管理 | conda install numpy | 在当前环境安装包 | conda install pandas matplotlib |
conda install numpy=1.21 | 安装指定版本的包 | conda install tensorflow=2.10 | |
conda list | 列出当前环境所有已安装的包 | conda list | |
conda update numpy | 更新某个包 | conda update scikit-learn | |
conda update --all | 更新当前环境所有包 | conda update --all | |
conda remove numpy | 从当前环境卸载一个包 | conda remove scrapy | |
conda search tensorflow | 搜索包,查看可用版本 | conda search pytorch | |
频道管理 | conda install -c conda-forge package | 从特定频道安装包 | conda install -c conda-forge opencv |
conda config --add channels url | 添加频道 | conda config --add channels conda-forge | |
conda config --show channels | 显示当前配置的频道 | conda config --show channels | |
导入导出 | conda env export > environment.yml | 导出当前环境到文件 | conda env export > environment.yml |
conda env create -f environment.yml | 根据文件创建环境 | conda env create -f environment.yml |
其他命令
表格中的命令足以应对大部分场景,但掌握下面几个技巧能让你的工作流更加顺畅:
-
使用
conda-forge
频道:这是一个社区驱动的频道,包版本通常更新、更全。建议将其设置为最高优先级。conda config --add channels conda-forge conda config --set channel_priority strict
-
导出精准的环境文件:直接使用
conda env export
导出的环境文件会包含大量底层依赖,可能不利于跨平台复用。推荐使用--from-history
参数,它只导出你明确安装的包,使得环境文件更简洁。conda env export --from-history > environment.yml
-
与 Pip 协同工作:如果某个包在 Conda 中找不到,可以在 Conda 环境中使用 Pip 安装。但为了减少依赖冲突,最好遵循 “先Conda,后Pip” 的原则。
conda install numpy pip # 先通过conda安装 pip install some-package-not-in-conda # 再用pip安装
-
清理缓存以释放空间:定期清理Conda的缓存包是个好习惯。
conda clean --all
其他
conda国内镜像
若下载速度慢,可修改 Conda 配置文件 .condarc
,添加清华镜像源加速:
channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudnvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
修改后重启终端,安装命令不变,下载速度可提升 3-5 倍。
Conda & pip
关键原则 | 推荐做法 | 需要避免的情况 |
---|---|---|
使用顺序 | 先使用 Conda 安装尽可能多的包,再使用 Pip 安装 Conda 中没有的包 | 不要在同一个环境里频繁交替、随机使用 Conda 和 Pip |
环境隔离 | 为需要混用 Conda 和 Pip 的项目创建独立的虚拟环境 | 避免在 Anaconda/Miniconda 的 base 基础环境中使用 Pip |
Pip 配置 | 保持 Pip 的默认升级策略 --upgrade-strategy only-if-needed | 不要使用 pip --user 在用户目录安装包 |
环境重建 | 如果后续需要安装新的 Conda 包,考虑重新创建环境,因为 Conda 可能无法完全感知 Pip 安装带来的变更 | 不要在一个"混乱"的环境里反复修补 |
使用原则:
- 顺序是关键:像调制鸡尾酒一样,先 Conda,后 Pip。这个顺序能最大程度减少混乱。
- 隔离是保障:为每个项目创建独立的虚拟环境,这是混用 Conda 和 Pip 时的安全实验场。
- 重建好过修补:当环境因后续安装变得复杂时,重新创建环境往往比花费大量时间排查依赖冲突更高效。
- 恪守「Conda优先」的使用顺序
- 为什么? Conda 和 Pip 处理依赖关系的方式有根本不同。Conda 在安装包时会使用一个“求解器”来验证环境中所有包的依赖关系是否都能同时满足,这有助于创建一个稳定的环境。而 Pip 是按顺序安装依赖的,这可能导致后来安装的包破坏先前包的依赖。
- 怎么做? 首先尝试用 Conda(包括
conda-forge
等社区频道)安装你需要的包。只有当 Conda 无法提供某个包时,再求助于 Pip。
- 创建专用的虚拟环境
- 为什么? 将可能出现的依赖冲突隔离在项目专用的环境中,不会影响其他项目或基础的 Conda 环境。这样即使环境损坏,也可以轻松删除重建。
- 怎么做?
在此之后,再在这个# 创建新环境并指定Python版本 conda create -n my_project python=3.9 conda activate my_project
my_project
环境里遵循「Conda优先」的原则安装包。
- 确保使用环境内的 Pip
- 为什么? 系统可能存在多个 Pip,如果误用了环境外的 Pip,包会被安装到错误的位置,导致环境混乱。
- 怎么做? 激活环境后,使用
which pip
(Linux/macOS)或where pip
(Windows)命令检查,确保输出的路径包含当前环境名,如.../envs/my_project/bin/pip
。
一个更稳妥的方法是使用 Python 模块方式运行 Pip:
这种方式能确保使用的是当前环境下的 Python 对应的 Pip。python -m pip install <包名>
- 使用环境文件重现环境
- 为什么? 为了确保你的项目环境(包括所有依赖)能被你本人或他人准确复现,最好将环境导出为文件。
- 怎么做?
- 导出既包含 Conda 包也包含 Pip 包的环境文件:
导出的conda env export > environment.yml
environment.yml
文件会列出所有包及其精确版本,包括通过 Pip 安装的包。 - 其他人拿到这个文件后,可以一键创建相同的环境:
conda env create -f environment.yml
- 导出既包含 Conda 包也包含 Pip 包的环境文件:
Python venv
venv
是 Python 官方推荐的环境管理工具,从 Python 3.3 开始成为标准库的一部分。它的核心思想是创建一个轻量级的、独立的 Python 环境,这个环境拥有自己的 python
解释器、pip
安装工具和独立的第三方包安装目录。
核心命令与步骤
步骤 | 命令 | 说明 |
---|---|---|
1. 创建环境 | python -m venv /path/to/new/virtual/environment | 创建一个新的虚拟环境。通常命名为 venv 或 .venv 。 |
2. 激活环境 | Windows (CMD/PowerShell):venv\Scripts\activate macOS / Linux (Bash): source venv/bin/activate | 激活环境后,命令行提示符通常会显示环境名。此后所有 python 和 pip 命令都只在该环境中生效。 |
3. 安装包 | pip install requests numpy | 在激活的环境中使用 pip 安装所需包。 |
4. 停用环境 | deactivate | 退出当前虚拟环境,回到系统全局环境。 |
5. 删除环境 | 直接删除整个环境文件夹即可。 | 例如 rm -rf venv (Linux/macOS) 或 rmdir /s venv (Windows)。 |
示例:
# 1. 在项目根目录下创建名为 'venv' 的环境
python -m venv venv# 2. 激活环境
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate# 3. 确认 Python 解释器位置
which python # 输出应为:/path/to/your/project/venv/bin/python# 4. 安装包
pip install flask pandas# 5. 导出环境依赖(在激活环境下)
pip freeze > requirements.txt# 6. 停用环境
deactivate
从 requirements.txt
恢复环境:
# 创建并激活新环境后
pip install -r requirements.txt
venv & Conda
Conda 和 venv
是不同层级的环境管理工具,通常不建议在同一个项目目录中同时使用它们(比如在 Conda 环境内部再创建 venv
),因为这会造成依赖管理的混乱。
结合策略的核心思想是:利用 Conda 管理复杂的、非 Python 的依赖和特定的 Python 版本;利用 venv
的纯粹和标准化来锁定最终的项目依赖。
- 策略一:使用 Conda 创建 Python 解释器,用
venv
管理项目依赖
这是最实用的一种结合方式。当项目需要一个 Conda 来管理的特定 Python 版本,或者依赖某个通过 Conda 才能方便安装的复杂库(如科学计算栈、PyTorch/TensorFlow 等)时,可以采用此策略。
工作流程:
- 用 Conda 创建“基础”环境:创建一个包含特定 Python 版本和复杂依赖的 Conda 环境。
- 在此环境中创建
venv
:利用这个 Conda 环境中的python
解释器,为你的具体项目创建一个纯净的venv
。 - 在
venv
中开发:所有项目特定的、纯 Python 的依赖都通过venv
环境中的pip
来安装和管理。
示例: 当需要一个包含 PyTorch 和特定 Python 版本的环境来进行机器学习项目。
# 1. 使用 Conda 创建一个包含 Python 和 PyTorch 的环境
conda create -n my_conda_env python=3.9 pytorch torchvision torchaudio cpuonly -c pytorch
conda activate my_conda_env# 2. 进入你的项目目录
cd /path/to/my_project# 3. 使用 Conda 环境中的 Python 解释器来创建一个 venv
python -m venv venv# 4. 激活项目自己的 venv(注意:此时你已“脱离”Conda环境,进入了更轻量的venv)
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate# 5. 现在,你的 Python 来自 Conda 环境(包含PyTorch),但 pip 指向的是纯净的 venv。
# 你可以安装项目其他依赖,它们不会污染上层的 Conda 环境。
pip install requests matplotlib jupyter# 6. 导出依赖时,只导出你在 venv 中安装的包,非常干净。
pip freeze > requirements.txt
策略一所推荐的嵌套(清晰的层级依赖及项目管理):
Conda环境 (my_conda_env) - 【角色:基础解释器与核心库提供商】├── Python 3.9└── PyTorch (通过Conda安装,包含其复杂的C++依赖)
项目venv (./venv) - 【角色:纯净的`项目依赖管理器`】├── Python解释器 -> 符号链接指向 ../my_conda_env/bin/python└── 所有项目包 (通过pip安装)├── requests├── matplotlib└── jupyter
-
核心思想:在这个结构里,上层的Conda环境仅仅充当了一个“Python解释器和核心基础库的提供者”,而
venv
相当于一个完整的项目管理环境。当激活项目的venv
后,并不是在同时使用两个环境管理器。你只是在用一个由Conda提供的、干净的Python解释器来运行一个标准的venv
。 -
依赖流向是单向的:项目
venv
中的pip不会去修改上层Conda环境中的任何包。它只在自己的site-packages
目录里安装包。当你pip freeze
时,得到的requirements.txt
不包含PyTorch等由Conda安装的底层包,只包含你在项目层面明确安装的包,因此非常干净。 -
依赖清晰:
requirements.txt
只包含你明确为项目安装的包,不包含 Conda 安装的大量底层依赖。 -
环境纯净:项目环境独立于 Conda 环境,避免了在 Conda 环境内直接使用
pip
可能造成的依赖冲突。 -
易于重现:其他人只需先准备好相同的 Conda 基础环境,然后用你的
requirements.txt
即可复现项目环境。
策略二:根据场景选择工具
这是一种更简单直接的结合方式,无需嵌套,根据项目需求选择其一。
场景 | 推荐工具 | 理由 |
---|---|---|
数据科学、机器学习项目 | Conda | 依赖复杂的科学计算库(NumPy, SciPy, Pandas)、框架(PyTorch, TensorFlow)或需要特定版本的 Python。Conda 能很好地处理这些包及其非 Python 依赖。 |
Web 开发、纯 Python 库开发 | venv | 依赖大多是纯 Python 包,可以从 PyPI 直接获取。venv 更轻量、启动更快,且生成的 requirements.txt 是行业标准。 |
需要隔离系统 Python | venv | 在不允许修改系统 Python 的环境中,venv 是最安全、最标准的选择。 |
混合语言项目 | Conda | 项目依赖不仅限于 Python,还涉及 R、C/C++ 库等,Conda 是跨语言的包管理器。 |
- 不要嵌套使用:避免在激活的 Conda 环境内再创建和激活
venv
,反之亦然。这会导致路径混乱。不推荐的嵌套(混乱的依赖混合):Conda环境 (env_A)├── 通过Conda安装了包 numpy, requests└── 内部激活了 venv└── 又通过pip安装了包 pandas, flask
- 问题:无法清晰界定一个包(比如
requests
)到底应该由Conda管理还是由pip管理。Conda的求解器无法感知venv
内pip安装的包,可能导致无法解决的依赖冲突。整个环境的依赖关系是一团乱麻。
- 问题:无法清晰界定一个包(比如
- 明确分工:
- Conda:擅长管理 Python 解释器本身、数据科学栈、有复杂非 Python 依赖的包。
venv
:擅长管理 纯 Python 项目的依赖,生成干净、标准的依赖列表。
- 推荐的混合策略:对于复杂项目,采用 策略一。先用 Conda 搭建一个包含“重型”依赖的基础,然后在这个基础上用
venv
为你的具体项目创建一个纯净的、可复现的依赖空间。 - 简单项目:如果是纯 Python 项目,直接使用
venv
就足够了,无需引入 Conda。