问题描述
有没有一种方法可以减少我的需求。一年前我改用Python,那时我还不完全了解它是如何工作的。因此,当我需要创建requirements.txt时,我只是冻结了一点并复制了所有要求。今天,我知道我并不需要仅在导入其他需求的顶层就可以实现这些目标?
解决方法
有一些选择。
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 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遇到了问题