Python 中的 requirements.txt 与 setup.py
新手而言管理 Python 项目中的依赖项是非常具有挑战性的,这个问题是由历史原因引起的并且一直被吐槽。
在今天的文章中,我们将讨论如何正确管理 Python 项目的依赖关系。更具体地说,将讨论 requirements.txt 文件的用途以及如何使用 setuptools 来分发自定义的Python 包并让其他用户进一步使用和开发它。除此以外还将讨论设置文件(即 setup.cfg 和 setup.py)的用途以及如何将它们与需求文件一起使用,这样可以使包开发和重新分发的过程变得更容易。
Python项目的依赖关系是什么
让我们从包依赖开始;介绍它们到底是什么以及如何正确管理它们,因为这样可以使以使 Python 项目变得更容易维护。
简单来说,依赖项是我们Python项目所依赖的外部其他的Python 包,例如在AI方向,用到最多的包就是Numpy和Pandas。在 Python 中,这些依赖通常可以在 Python 包索引 (PyPI) 或其他管理工具中找到(例如 Nexus),后面我们都以PyPI为例介绍,因为它是最常用而且大家都在用的包管理工具。
现在我们自己的 Python 项目中可能需要引用某个特定版本的第三方包有依赖。这种情况可能会导致依赖冲突的出现,因为我们所有的依赖中(至少)有两个依赖项可能依赖同一个包,但每个依赖项都需要该外部包的特定版本(比如一个需要1.0,而一个需要2.0)。这种特殊的情况我们需要告诉 pip 需要如何处理依赖关系以及我们需要哪些特定版本。
一般情况下,我们需要requirements.txt 来指定项目的依赖包和版本,所以我们先看看requirements.txt的格式
requirements.txt 文件
requirements.txt 是一个文件,列出了 Python 项目的所有依赖项。如前所述,它还可能包含依赖项的依赖项。列除了依赖包名称外,还可以指定特定的版本(使用 ==)、>=或<=,甚至两者都指定。
示例 requirements.txt 文件
matplotlib>=2.2
numpy>=1.15.0, <1.21.0
pandas
pytest==4.0.1
然后就可以使用以下命令通过 pip 安装这些依赖项(通常在虚拟环境中):
pip install -r requirements.txt
在上面的示例中,我们指定了一些依赖项。例如,对于没有关联版本的的 pandas 包,pip 将正常安装最新版本,除非其他依赖项之一与它有任何冲突(如果有冲突,pip 将安装满足其余依赖项指定条件的最新 pandas 版本)。对于 pytest,包管理器将安装特定版本(即 4.0.1),而对于 matplotlib,将安装至少大于或等于 2.2 的最新版本(这还是取决于是否有其他依赖项具体要求,如果没有则会安装符合条件的最新版) 。对于 numpy 包,pip 将尝试安装 1.15.0(包含)和 1.21.0(不包含)之间的最新版本。
在安装所有依赖项后,可以通过运行
完整文章:
https://www.overfit.cn/post/f5fac53241d643c9a343260ede9aee81