Python项目不要再使用requirements.txt

写在前面

"requirements.txt"是一个文本文件,常用于 Python 项目中列出项目所依赖的软件包及其版本号。它是一种常见的依赖管理方式,用于记录项目所需的第三方库和版本信息,以便在其他环境中重现相同的依赖关系。

为什么不建议使用requirements.txt

使用pip和requirements.txt来管理Python依赖可能会导致以下问题。

  1. requirements.txt可能导致依赖冲突。
  2. requirements.txt很难监控所使用的依赖版本。

Python 开发者一定熟悉 pip 工具,它是一个可以用来从 Python 软件包索引(PyPI)安装依赖包的工具。

我们可以通过以下命令管理依赖。

pip freeze > requirements.txt

这将创建一个"requirements.txt"文件。如果我们使用的依赖不依赖于其他依赖版本,那么这种方法仍然适用。但是,当我们使用的依赖有其他依赖版本时,我们将可能遇到依赖冲突的问题,因为这些依赖具有不同的版本。

如果我们希望在所使用的所有生产环境中拥有相同的依赖版本,我们需要确定我们使用的依赖版本以及我们使用的依赖的传递版本。在创建requirements.txt文件时,我们可以直接写下我们正在使用的依赖版本。

然而,pip不会锁定我们使用的传递依赖的版本。也许可以通过使用pip-tools来扩展我们想要锁定的依赖版本。然而,使用pip-tools时,我们必须手动进行设置,并且必须知道如何正确锁定我们使用的依赖和传递依赖的版本。

其实,在Python中,已经有如何维护一致性和管理依赖版本以及所使用的虚拟环境的方式。这些规则在PEP 517、PEP 518和PEP 612中有说明,这些规则涉及基于依赖项和所使用的虚拟环境的项目管理方式。幸运的是,有很多人正在尝试解决与管理虚拟环境和依赖版本相关的问题。有几个工具可以帮助我们解决这个问题。

使用PDM

你可以尝试使用PDM。PDM具有锁定文件、缓存包和虚拟环境管理功能,可以帮助我们更轻松地解决上述问题。PDM 会将所使用的依赖版本保存和锁定在"pyproject.toml"和"pdm.lock"文件中,以锁定我们的传递依赖版本。在 PDM 中,每次运行"pdm init"命令时,我们使用的虚拟环境将自动设置。根据我的经验,也许这个工具并不完美,但在解决上述问题和加快我所从事的后端服务开发方面非常有帮助。

安装PDM

在终端或命令提示符中运行以下命令来安装PDM

$ pip install pdm

初始化项目

在项目的根目录下运行以下命令来初始化PDM项目

$ pdm init

这将创建一个名为pyproject.toml的文件,其中包含项目的基本配置信息。

添加依赖

使用 PDM 添加依赖项。您可以编辑pyproject.toml文件,手动添加依赖项,或者使用PDM提供的命令来添加依赖项。例如:

$ pdm add requests

这将在pyproject.toml文件中添加一个名为requests的依赖项。

安装依赖

运行以下命令来安装项目的依赖项

$ pdm install

PDM 将会安装所有在pyproject.toml文件中定义的依赖项,并创建一个虚拟环境来隔离项目。

运行命令

使用 PDM 运行Python命令。与直接使用 python 命令运行不同,PDM 会在项目的虚拟环境中执行命令,确保使用正确的依赖项。

$ pdm run python your_script.py

构建和分发

如果您希望构建和分发您的项目,可以使用PDM来执行这些任务。例如,使用以下命令构建项目:

$ pdm build

这将创建一个可分发的包,可以在dist目录中找到。

其他工具

还有其他可以使用的工具,例如 Poetry。从概念上讲,Poetry和 PDM 几乎是相同的,但 Poetry 不符合PEP 612的规定,我们也可以设置Poetry,使我们的项目不使用虚拟环境。

写在最后

读到这里,你应该对 python 依赖有更深的理解。我希望您会开始放弃使用 pip 并禁止使用requirements.txt,以便您的项目具有良好且一致的依赖版本。解决您使用的依赖版本一致性的问题当然会让您的工作更快更容易。

标签: python