page contents

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

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

attachments-2026-04-GPMbCRPE69f16579f1a57.png上周帮一个实习生配环境,看他装了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


推荐用法:每个项目单独创建venvbash

# 项目目录
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

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg


你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1999 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1999 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章