Poetry and requirements,谁是管理Python项目依赖项的最强工具

requirements.txt文件是一种用于指定Python项目依赖项的简单方法。它是一个包含要安装的Python包及其版本的纯文本文件。

Poetry是一个Python包管理和依赖解析工具,用于简化Python项目的依赖管理。

目录

requirements使用

Poetry使用

优势


requirements使用

requirements.txt是包含要安装的Python包及其版本的纯文本文件。

使用步骤:
(1)创建requirements.txt文件,列出项目所需的所有Python包及其版本,比如:

Django==3.2.4
celery==4.4.0
Django==3.2.4
celery==4.4.0

(2)安装requirements.txt文件中列出的依赖项(如果速度太慢,还可以用 -i 参数跟镜像加速)

pip install -r requirements.txt

(3)更新:手动编辑即可,然后重新pip install -r requirements.txt。

(4)卸载:

pip uninstall -r requirements.txt

(5)已在虚拟环境中安装依赖项,但尚未创建requirements.txt文件,可以使用以下命令自动生成一个包含所有包及其版本的requirements.txt文件:

pip freeze > requirements.txt


Poetry使用

(1)安装Poetry,比如安装Poetry version 1.1.15:

pip install Poetry==1.1.15

(2)使用Poetry创建一个新的Python项目

poetry new my_project

(3)导航并初始化Poetry

cd my_project
poetry init

此时的pyproject.toml文件内容

 

(4)添加依赖项,比如添加一个django 2.2.28版本,

poetry add django==2.2.28

此时的pyproject.toml文件内容

同时还自动创建或更新 poetry.lock文件以确保项目的一致性和可重现性,在添加依赖性后项目的所有依赖都会更新。

 

 (5)如果手动去修改pyproject.toml,可以用以下命令更新依赖项

poetry update

(6)运行项目:要在Poetry的虚拟环境中运行项目,确保脚本在Poetry管理的虚拟环境中运行

poetry run python <your_script.py>

比如创建hello.py文件,运行

poetry run python my_project/hello.py

 (7)构建和发布包:要构建并发布您的Python包,将自动生成所需的setup.pysetup.cfgMANIFEST.in等文件,并将包发布到PyPI。

poetry build
poetry publish


优势

Poetry优势

  1. 依赖解析:Poetry可自动解析项目的依赖关系,确保安装的包版本间没有冲突。这与requirements.txt不同,后者需手动管理和指定每个包的版本。
  2. 锁定文件:使用poetry.lock的锁定文件确保项目在不同环境中的一致性和可重现性。这意味着在其他环境中安装依赖项时,Poetry会确保使用与锁定文件中记录的相同版本。
  3. 环境隔离:Poetry支持自动创建和管理虚拟环境,从而确保项目的依赖项与系统全局安装的包隔离。这有助于避免因全局包版本冲突而导致的问题。
  4. 包发布:Poetry提供了一种简单的方法来构建和发布Python包。它可以自动生成setup.pysetup.cfgMANIFEST.in等文件,从而简化了发布过程。
  5. 简化的命令行界面:Poetry提供了一个简洁、统一的命令行界面,用于管理项目的依赖关系、虚拟环境和包发布。与requirements.txt相比,这使得依赖管理更加直观和一致。

requirements.txt优势

  1. 简单易用:简单直接指定项目依赖项。不需要额外的工具或配置,只需纯文本文件。
  2. 广泛支持:许多第三方工具和服务都支持它。有助于Python生态系统的兼容性。
  3. 更低的学习曲线:对于已经习惯使用requirements.txtpip的开发人员来说,这种方法可能更加简单和熟悉。

日常开发中,选择Poetry或requirements.txt取决于项目需求和个人喜好:

  • 如果需要更高级的依赖管理功能(如自动依赖解析、环境隔离和包发布)或项目较为复杂,并且愿意学习和适应新工具,那么Poetry可能是一个更好的选择。
  • 如果您的项目相对简单,或者您已经习惯使用requirements.txtpip,那么继续使用requirements.txt可能更加方便和实用。

猜你喜欢

转载自blog.csdn.net/lxd_max/article/details/131766544