减少 requirements.txt

Reducing requirements.txt

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

有几个选项。

pip-tools

如果您在项目中使用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 可以通过 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 有问题