【问题标题】:Reducing requirements.txt减少需求.txt
【发布时间】:2021-01-17 11:30:55
【问题描述】:

有没有办法减少我的 requirements.txt 我在一年前切换到 Python,那时我并没有完全理解事情是如何工作的。因此,当我需要创建 requirements.txt 时,我只是做了一个 pip freeze 并复制通过了所有要求。今天我知道我不需要它们都只需要导入其他需求的顶层有没有办法实现它?

【问题讨论】:

  • 您的 requirements.txt 应该 列出所有内容,因此每个依赖项的版本都是固定的,您不会因突然更新引入错误而感到惊讶。您可能需要一个 setup.py 仅列出您的直接依赖项。

标签: python requirements.txt


【解决方案1】:

有几个选项。

点子工具

如果您在项目中使用pip,您可以感谢pip-tools。首先将您的需求手动放入requirements.in,然后使用pip-compile,您可以生成包含所有依赖项的最终requirements.txt。假设您的项目的依赖项是 Django 和 Ansible。您将它们放入requirements.in,如下所示:

# requirements.in
django
ansible

然后运行pip-compile得到整个依赖图:

$ pip-compile requirements.in

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements.in
#
ansible==2.9.12           # via -r requirements.in
cffi==1.14.2              # via cryptography
cryptography==3.1         # via ansible
django==1.11.29           # via -r requirements.in
jinja2==2.11.2            # via ansible
markupsafe==1.1.1         # via jinja2
pycparser==2.20           # via cffi
pytz==2020.1              # via django
pyyaml==5.3.1             # via ansible
six==1.15.0               # via cryptography

诗歌

如果您使用Poetry,那么您可以通过poetry add 继续添加依赖项,并在需要时最终导出它们。否则你可以跳过导出步骤,因为诗歌可以通过poetry build为你生成分发包:

$ poetry add django

Using version ^3.1 for django

Updating dependencies
Resolving dependencies... (1.4s)

Writing lock file


Package operations: 3 installs, 0 updates, 0 removals

  - Installing asgiref (3.2.10)
  - Installing sqlparse (0.3.1)
  - Installing django (3.1)

您可以在pyproject.toml 中找到所有依赖项。如果您需要将其导出到requirements.txt

$ poetry export -f requirements.txt -o requirements.txt --without-hashes

我正在使用--without-hashes,因为 AppEngine 有问题

【讨论】:

  • 如果您使用 Poetry,则不需要 requirements.txt,因为 .lock 文件会替换它。
  • 是的,这就是为什么我说“如果需要,最终导出它们。否则你可以跳过导出步骤......”
猜你喜欢
  • 2010-11-24
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2015-06-03
  • 2011-03-07
  • 2012-09-20
相关资源
最近更新 更多