这里写目录标题
- 一、什么是 Python 依赖(Python Dependencies)?
- 1. 依赖的作用
- 2. 如何管理 Python 依赖
- 3. 依赖管理问题
- 4. 依赖锁定
- 总结
- 二、使用pip安装包+venv隔离环境
- 方法 1:使用 venv(推荐)
- 创建虚拟环境
- 激活环境
- 安装包
- 冻结(导出)环境
- 退出环境
- 删除环境
- 方法 2:使用 virtualenv(适用于 Python 2)
- 安装 virtualenv
- 创建环境
- 方法 3:使用 pipenv(自动管理依赖)
- 安装 pipenv
- 创建和激活环境
- 安装包
- 导出依赖
- 退出环境
- 总结
- 三、使用Conda进行包安装和环境管理
- 四、pip install和conda install
- 4.1 pip install vs conda install
- 4.2 PyPI和Anaconda 仓库
- 4.2.1 PyPI(Python Package Index)
- 4.2.2 Anaconda 仓库
- (1)defaults 仓库
- (2)Conda Forge
- 4.2.3 对比 PyPI 和 Anaconda 仓库
- 4.3 pip install 和 conda install的安装位置
- 4.4 如何判断conda中某个包是通过conda还是pip安装的?
- 4.5 使用建议
- 五、其他包管理工具
- uv
- poetry
一、什么是 Python 依赖(Python Dependencies)?
Python 依赖(dependencies) 指的是 某个 Python 项目运行所需的外部库或模块。这些依赖通常由 pip
从 Python Package Index(PyPI) 或其他包管理器(如 Conda)下载和安装。
1. 依赖的作用
Python 标准库提供了一些基础功能(如 math
, os
, sys
),但复杂的功能通常依赖 第三方库,如:
- Web 开发:
Flask
,Django
- 数据科学:
numpy
,pandas
,matplotlib
- 机器学习:
scikit-learn
,tensorflow
,torch
- 数据库:
SQLAlchemy
,PyMySQL
这些库通常不是 Python 内置的,需要额外安装,成为该项目的“依赖”。
2. 如何管理 Python 依赖
(1)安装依赖
pip install requests
会安装 requests
及其所有依赖项。
(2)列出已安装的依赖
pip list
(3)导出依赖(生成 requirements.txt)
如果希望在其他环境中安装相同的依赖,可以使用:
pip freeze > requirements.txt
requirements.txt
示例:
numpy==1.24.2
pandas==1.5.3
requests==2.28.2
(4)从 requirements.txt 安装依赖
pip install -r requirements.txt
3. 依赖管理问题
(1)版本冲突
- 项目 A 需要
numpy==1.21.0
- 项目 B 需要
numpy==1.24.0
- 如果两个项目共享环境,可能会导致版本冲突。
解决方案:
- 使用虚拟环境(venv):
python -m venv my_env source my_env/bin/activate # Mac/Linux my_env\Scripts\activate # Windows
- 使用
pipenv
:pipenv install pipenv shell
(2)依赖递归
安装 pandas
可能会自动安装 numpy
,因为 pandas
依赖于 numpy
。某些库的依赖会影响项目的整体结构。
解决方案:
- 定期使用
pip list --outdated
检查更新。 - 使用
pipdeptree
可视化依赖关系:pip install pipdeptree pipdeptree
4. 依赖锁定
在团队开发或生产环境中,建议使用 依赖锁定 确保环境一致:
- pip:
requirements.txt
- pipenv:
Pipfile.lock
- poetry:
poetry.lock
示例:
pip freeze > requirements.txt
pip install -r requirements.txt
总结
方式 | 用途 |
---|---|
pip install package | 安装单个依赖 |
pip list | 查看当前环境的依赖 |
pip freeze > requirements.txt | 导出依赖 |
pip install -r requirements.txt | 从 requirements.txt 安装依赖 |
venv / pipenv | 解决版本冲突,管理独立环境 |
推荐:始终使用虚拟环境来管理 Python 依赖,避免版本冲突!
二、使用pip安装包+venv隔离环境
使用 pip
安装包时,推荐结合 虚拟环境(virtual environment) 来管理 Python 依赖,避免不同项目的包版本冲突。主要方法包括 venv(Python 内置)、virtualenv(更强大)、pipenv(自动管理依赖)。
方法 1:使用 venv(推荐)
venv
是 Python 内置的虚拟环境工具,适用于大多数情况。
创建虚拟环境
python -m venv my_env # 创建名为 my_env 的环境
激活环境
- Windows(CMD):
my_env\Scripts\activate
- Windows(PowerShell):
my_env\Scripts\Activate.ps1
- Mac/Linux:
source my_env/bin/activate
安装包
pip install package_name
冻结(导出)环境
pip freeze > requirements.txt
可用于在新环境中复现安装:
pip install -r requirements.txt
退出环境
deactivate
删除环境
rm -rf my_env # Mac/Linux
rd /s /q my_env # Windows
方法 2:使用 virtualenv(适用于 Python 2)
virtualenv
与 venv
类似,但支持更多 Python 版本,创建的环境更独立。
安装 virtualenv
pip install virtualenv
创建环境
virtualenv my_env
与
venv
类似的激活、安装、退出操作
方法 3:使用 pipenv(自动管理依赖)
pipenv
结合了 pip
和 venv
,自动管理虚拟环境,并创建 Pipfile
追踪依赖。
安装 pipenv
pip install pipenv
创建和激活环境
pipenv install
pipenv shell
安装包
pipenv install package_name
导出依赖
pipenv lock
退出环境
exit
总结
方式 | 优点 | 适用场景 |
---|---|---|
venv | Python 内置,简单高效 | 绝大多数项目 |
virtualenv | 支持 Python 2 和独立环境 | 需要支持 Python 2 的情况 |
pipenv | 自动管理环境和依赖,安全性更高 | 复杂项目,依赖管理严格的情况 |
推荐使用
venv
,如果有复杂依赖管理需求可用pipenv
。
三、使用Conda进行包安装和环境管理
Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。
如何下载及使用Anaconda进行包管理和环境管理,推荐文章:https://blog.csdn.net/chenxy_bwave/article/details/119996001
四、pip install和conda install
4.1 pip install vs conda install
pip install和
conda install` 都是 Python 包管理工具,但它们的工作方式和适用场景不同:
特性 | pip install | conda install |
---|---|---|
管理工具 | pip (Python 包管理器) | conda (Anaconda 包管理器) |
包来源 | PyPI(Python Package Index) | Anaconda 仓库(含 Conda Forge、defaults) |
支持的包类型 | 仅 Python 相关的包 | 不仅支持 Python 包,还支持 C/C++ 依赖包(如 numpy 、scipy 等的底层依赖) |
依赖管理 | 仅管理 Python 依赖,需手动解决非 Python 依赖问题 | 自动管理 Python 和非 Python 依赖 |
虚拟环境管理 | 结合 venv 或 virtualenv 使用 | 结合 conda 环境使用 |
安装方式 | 直接安装 .whl 或 .tar.gz | 使用预编译的二进制包(更快、更稳定) |
速度和兼容性 | 可能因编译问题导致安装失败 | 通常安装更快,兼容性更好 |
4.2 PyPI和Anaconda 仓库
4.2.1 PyPI(Python Package Index)
Python Package Index(PyPI) 是 Python 官方的软件包仓库,类似于软件商店,开发者可以在上面发布 Python 库,用户可以通过 pip install
下载和安装这些库。
- 官网: https://pypi.org
- 安装命令:
pip install package_name
- 包格式:
.whl
(Wheel)或.tar.gz
(源代码) - 特点:
- 通用性强,支持所有 Python 发行版(CPython、PyPy等)
- 只包含 Python 相关的包,不提供 C/C++ 依赖项
- 可能需要编译,某些包依赖于 C/C++ 库,需要额外安装依赖(如
numpy
、scipy
)
4.2.2 Anaconda 仓库
Anaconda 主要面向 数据科学 和 机器学习,它的包管理系统 Conda 维护了多个官方和社区仓库,包括defaluts仓库和Conda Forge仓库。
(1)defaults 仓库
- 由 Anaconda 官方维护,默认包含的包源。预编译好的二进制包,安装速度快,兼容性强
- 适用于数据科学、机器学习的常见库(如
numpy
,pandas
,scipy
,matplotlib
) - 安装命令:
conda install package_name
(2)Conda Forge
- 社区驱动 的 Conda 仓库,包含更多第三方库,维护更新比
defaults
更快,包的种类更多 - 安装时可以用
-c conda-forge
指定conda install -c conda-forge package_name
- 适用于
defaults
没有的包,或者需要较新版本的包
4.2.3 对比 PyPI 和 Anaconda 仓库
特性 | PyPI(pip) | Anaconda(conda) |
---|---|---|
主要用途 | 通用 Python 库 | 科学计算、数据分析 |
包管理工具 | pip | conda |
包来源 | PyPI | defaults, Conda Forge |
依赖管理 | 仅 Python 依赖 | Python + C/C++ 依赖 |
安装速度 | 可能较慢,需编译 | 预编译,通常更快 |
兼容性 | 可能出现依赖冲突 | 依赖管理更完善 |
使用建议:数据科学/机器学习领域,优先使用 conda install
(默认 defaults
,如果缺少可以用 conda-forge
)
4.3 pip install 和 conda install的安装位置
- conda install xxx:这种方式安装的库都会放在anaconda3/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。
- pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,那么xxx会被安装到anaconda3/envs/current_env/lib/python3.x/site-packages文件夹中,如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中
4.4 如何判断conda中某个包是通过conda还是pip安装的?
执行 conda list ,用pip安装的包显示的build项目为pypi。如下图所示:
4.5 使用建议
- 如果你使用 Anaconda 或 Miniconda,建议优先使用
conda install
,特别是涉及 数据科学、机器学习 或 科学计算(如numpy
,pandas
,tensorflow
)。 - 如果包 仅在 PyPI 可用 或 使用标准 Python 生态,可以用
pip install
。 - 也可以 混合使用:
- 先用
conda install
安装基础环境(如numpy
,scipy
,matplotlib
)。 - 再用
pip install
安装 Conda 仓库中没有的包。
- 先用
示例
conda create -n my_env python=3.9
conda activate my_env
conda install numpy pandas
pip install some_package_not_in_conda
这样可以兼顾 conda
的稳定性和 pip
的灵活性。
五、其他包管理工具
uv
是一个高性能的 Python 包管理工具,旨在替代 pip,提供更快的包安装速度。
poetry
poetry 是一个现代化的 Python 包管理和构建工具,集成了依赖管理、虚拟环境管理和包发布功能。特点如下:
- 功能:集成依赖管理、虚拟环境管理和包发布。
- 依赖管理:使用 pyproject.toml 和 poetry.lock 文件记录依赖,自动解析并安装所需库。
- 环境管理:自动为每个项目创建和管理虚拟环境,确保项目独立性。
- 包发布:简化包的构建和发布流程,支持发布到 PyPI 等包索引。
- 适用场景:适合大型或复杂项目,需要严格依赖管理和包发布功能的情况。