当前位置:首页>python>Python包管理大乱斗:pip/venv/conda/pipx到底怎么选?

Python包管理大乱斗:pip/venv/conda/pipx到底怎么选?

  • 2026-10-11 08:39:35
Python包管理大乱斗:pip/venv/conda/pipx到底怎么选?

大家好,我是几行代码。

上周帮一个实习生配环境,看他装了Python然后直接pip install把包全装到系统环境里,我当场血压飙升。

这场景是不是很熟悉?很多新手甚至老手都搞不清楚Python包管理的这些工具到底怎么用、什么时候用哪个。今天咱们一次说清楚。

先搞懂两个概念:包管理和环境管理

很多人混为一谈,其实是两回事:

  • 包管理:安装、升级、卸载Python包(库)
  • 环境管理:隔离不同项目的依赖,避免版本冲突

就像租房:包管理是买家具,环境管理是选房子。你可以在不同的房子里放不同的家具,互不干扰。

pip:全能选手,但有个致命弱点

pip是Python官方标配,装Python的时候就自带了。

python
# 安装包
pip install requests

# 安装指定版本
pip install flask==2.0.0

# 升级包
pip install --upgrade requests

# 卸载
pip uninstall requests

# 导出依赖
pip freeze > requirements.txt

# 从文件安装
pip install -r requirements.txt

pip最大的问题是:全局安装,所有项目共享。

想象一下:项目A需要pandas 1.0,项目B需要pandas 2.0,你怎么办?没办法,只能来回卸装装卸。

venv:轻量级环境隔离,小白首选

Python 3.3之后内置了venv模块,专门解决全局安装的问题。

bash
# 创建虚拟环境(会在当前目录创建venv文件夹)
python -m venv myenv

# Windows激活
myenv\Scripts\activate

# Linux/Mac激活
source myenv/bin/activate

# 激活后安装的包只在这个环境里
pip install requests

# 退出环境
deactivate
推荐用法

:每个项目单独创建venv

bash
# 项目目录
cd my_project
python -m venv venv  # 习惯性把虚拟环境文件夹叫venv
source venv/bin/activate
pip install -r requirements.txt

venv的优点是轻量、官方内置、无额外依赖。缺点是创建新环境要从头装所有包,速度慢。

conda:科学计算的标配,但也容易踩坑

Anaconda/Miniconda自带的conda最初是为科学计算设计的,现在成了数据科学领域的标配。

bash
# 创建环境
conda create --name myenv python=3.11

# 激活环境
conda activate myenv

# 安装包(自动解决依赖)
conda install numpy pandas matplotlib

# 搜索包
conda search requests

# 列出所有环境
conda env list

# 删除环境
conda env remove --name myenv

conda的杀手锏是处理复杂依赖,尤其是涉及C/C++库的科学计算包(numpy、scipy等)。pip装这些经常报错,conda一步到位。

但是

,conda有个坑:它不只管理Python包,还能装其他东西。经常发生conda和pip混用导致环境损坏的问题。

conda最佳实践:只用conda装基础包

bash
# 创建环境时指定Python版本
conda create --name myenv python=3.11

# 基础科学计算包用conda
conda install numpy pandas

# 其他包用pip(激活环境后)
pip install requests flask

记住一条:conda装conda的,pip装pip的,井水不犯河水。

pipx:工具类程序的专属管家

pipx是专门给命令行工具准备的,2018年才出来,很多人不知道。

bash
# 安装pipx(需要先装)
python -m pip install pipx
pipx ensurepath  # 配置环境变量

# 安装命令行工具(隔离环境,自动管理)
pipx install black        # 代码格式化
pipx install httpie       # HTTP客户端
pipx install poetry       # 项目管理工具

# 运行工具
pipx run black .

# 升级
pipx upgrade black

# 卸载
pipx uninstall black

为什么要隔离?因为命令行工具通常只需要一个版本,但不同项目可能需要不同版本的同一个工具。pipx给每个工具单独创建环境,完美解决。

pipx vs pip

:pip装的是库(给代码import用的),pipx装的是工具(命令行直接运行的)。

实战指南:不同场景怎么选?

场景1:Web开发(小项目)

bash
# 首选 venv + pip
cd my_web_project
python -m venv venv
source venv/bin/activate
pip install flask gunicorn requests
pip freeze > requirements.txt

场景2:数据分析/机器学习

bash
# 首选 conda
conda create --name ml python=3.11
conda activate ml
conda install numpy pandas scikit-learn pytorch

# 如果conda没有的包,再用pip
pip install lightgbm xgboost

场景3:工具爱好者

bash
# 各种命令行工具用 pipx
pipx install black
pipx install isort
pipx install httpie
pipx install pre-commit

场景4:保持环境干净(通用原则)

永远不要

:

pip install xxx

(全局安装)

始终使用

:虚拟环境(venv/conda)

我的推荐组合

日常开发我用的组合:

venv + pip(Web/API项目)
conda + pip(数据科学项目)
pipx(命令行工具)

简单明了,够用就行。

常见问题

Q:virtualenv和venv有什么区别?

A:virtualenv是更老的工具,venv是Python 3.3内置的轻量替代品。功能差不多,新手直接用venv就行。

Q:Poetry/Pipenv这些新一代工具怎么样?

A:很好,但属于进阶内容。它们把依赖管理和环境管理合二为一,适合中大型项目。新手先用明白venv/pip再说。

Q:已经全局安装了怎么办?

A:删掉重装。如果系统已经乱了,python -m ensurepip重置pip,然后养成用venv的习惯。

Q:conda环境怎么导出分享?
bash
# 导出
conda env export > environment.yml

# 重建
conda env create -f environment.yml

总结

工具用途适用场景
pip包管理基础Python包安装
venv环境隔离Web开发、一般项目
conda环境+包管理数据科学、复杂依赖
pipx工具隔离命令行工具

记住:没有最好的工具,只有最适合场景的工具。多踩几个坑,自然就熟练了。


如果觉得有帮助,欢迎点赞、在看、转发三连!

有问题评论区见,我是几行代码,我们下期见。

最新文章

随机文章