大家好,我是几行代码。
上周帮一个实习生配环境,看他装了Python然后直接pip install把包全装到系统环境里,我当场血压飙升。
这场景是不是很熟悉?很多新手甚至老手都搞不清楚Python包管理的这些工具到底怎么用、什么时候用哪个。今天咱们一次说清楚。
先搞懂两个概念:包管理和环境管理
很多人混为一谈,其实是两回事:
- 包管理:安装、升级、卸载Python包(库)
-
- 环境管理:隔离不同项目的依赖,避免版本冲突
-
就像租房:包管理是买家具,环境管理是选房子。你可以在不同的房子里放不同的家具,互不干扰。
pip:全能选手,但有个致命弱点
pip是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模块,专门解决全局安装的问题。
# 创建虚拟环境(会在当前目录创建venv文件夹)
python -m venv myenv
# Windows激活
myenv\Scripts\activate
# Linux/Mac激活
source myenv/bin/activate
# 激活后安装的包只在这个环境里
pip install requests
# 退出环境
deactivate
推荐用法:每个项目单独创建venv
# 项目目录
cd my_project
python -m venv venv # 习惯性把虚拟环境文件夹叫venv
source venv/bin/activate
pip install -r requirements.txt
venv的优点是轻量、官方内置、无额外依赖。缺点是创建新环境要从头装所有包,速度慢。
conda:科学计算的标配,但也容易踩坑
Anaconda/Miniconda自带的conda最初是为科学计算设计的,现在成了数据科学领域的标配。
# 创建环境
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装基础包
# 创建环境时指定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年才出来,很多人不知道。
# 安装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开发(小项目)
# 首选 venv + pip
cd my_web_project
python -m venv venv
source venv/bin/activate
pip install flask gunicorn requests
pip freeze > requirements.txt
场景2:数据分析/机器学习
# 首选 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:工具爱好者
# 各种命令行工具用 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环境怎么导出分享?# 导出
conda env export > environment.yml
# 重建
conda env create -f environment.yml
总结
| 工具 | 用途 | 适用场景 |
|---|
| pip | 包管理 | 基础Python包安装 |
| venv | 环境隔离 | Web开发、一般项目 |
| conda | 环境+包管理 | 数据科学、复杂依赖 |
| pipx | 工具隔离 | 命令行工具 |
记住:没有最好的工具,只有最适合场景的工具。多踩几个坑,自然就熟练了。
如果觉得有帮助,欢迎点赞、在看、转发三连!有问题评论区见,我是几行代码,我们下期见。