Python 依赖(dependencies) 指的是 某个 Python 项目运行所需的外部库或模块。这些依赖通常由 pip
从 Python Package Index(PyPI) 或其他包管理器(如 Conda)下载和安装。
Python 标准库提供了一些基础功能(如 math
, os
, sys
),但复杂的功能通常依赖 第三方库,如:
Flask
, Django
numpy
, pandas
, matplotlib
scikit-learn
, tensorflow
, torch
SQLAlchemy
, PyMySQL
这些库通常不是 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
(1)版本冲突
numpy==1.21.0
numpy==1.24.0
解决方案:
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
在团队开发或生产环境中,建议使用 依赖锁定 确保环境一致:
requirements.txt
Pipfile.lock
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
安装包时,推荐结合 虚拟环境(virtual environment) 来管理 Python 依赖,避免不同项目的包版本冲突。主要方法包括 venv(Python 内置)、virtualenv(更强大)、pipenv(自动管理依赖)。
venv
是 Python 内置的虚拟环境工具,适用于大多数情况。
python -m venv my_env # 创建名为 my_env 的环境
my_env\Scripts\activate
my_env\Scripts\Activate.ps1
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
virtualenv
与 venv
类似,但支持更多 Python 版本,创建的环境更独立。
pip install virtualenv
virtualenv my_env
与
venv
类似的激活、安装、退出操作
pipenv
结合了 pip
和 venv
,自动管理虚拟环境,并创建 Pipfile
追踪依赖。
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是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。
如何下载及使用Anaconda进行包管理和环境管理,推荐文章:https://blog.csdn.net/chenxy_bwave/article/details/119996001
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 |
使用预编译的二进制包(更快、更稳定) |
速度和兼容性 | 可能因编译问题导致安装失败 | 通常安装更快,兼容性更好 |
Python Package Index(PyPI) 是 Python 官方的软件包仓库,类似于软件商店,开发者可以在上面发布 Python 库,用户可以通过 pip install
下载和安装这些库。
pip install package_name
.whl
(Wheel)或 .tar.gz
(源代码)numpy
、scipy
)Anaconda 主要面向 数据科学 和 机器学习,它的包管理系统 Conda 维护了多个官方和社区仓库,包括defaluts仓库和Conda Forge仓库。
numpy
, pandas
, scipy
, matplotlib
)conda install package_name
defaults
更快,包的种类更多-c conda-forge
指定conda install -c conda-forge package_name
defaults
没有的包,或者需要较新版本的包特性 | PyPI(pip) | Anaconda(conda) |
---|---|---|
主要用途 | 通用 Python 库 | 科学计算、数据分析 |
包管理工具 | pip |
conda |
包来源 | PyPI | defaults, Conda Forge |
依赖管理 | 仅 Python 依赖 | Python + C/C++ 依赖 |
安装速度 | 可能较慢,需编译 | 预编译,通常更快 |
兼容性 | 可能出现依赖冲突 | 依赖管理更完善 |
使用建议:数据科学/机器学习领域,优先使用 conda install
(默认 defaults
,如果缺少可以用 conda-forge
)
执行 conda list ,用pip安装的包显示的build项目为pypi。如下图所示:
conda install
,特别是涉及 数据科学、机器学习 或 科学计算(如 numpy
, pandas
, tensorflow
)。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
的灵活性。
是一个高性能的 Python 包管理工具,旨在替代 pip,提供更快的包安装速度。
poetry 是一个现代化的 Python 包管理和构建工具,集成了依赖管理、虚拟环境管理和包发布功能。特点如下: