如何在requirements.txt中只包含包的一部分



我想把这个包含在我的容器中:

pip install python-jose[cryptography]

作为测试,我在虚拟环境中运行它,得到:

cffi==1.14.6
cryptography==3.4.7
ecdsa==0.17.0
pyasn1==0.4.8
pycparser==2.20
python-jose==3.3.0
rsa==4.7.2
six==1.16.0

一般来说,在requirements.txt中我只需要:

python-jose==3.3.0

但是我很想知道如何才能让子包保持相同的版本。

。像这样:

python-jose[cryptography==3.4.7]==3.30

但我不知道我在做什么…

所以python-jose[cryptography]中的cryptography通常不是其他Python包的名称。在这种情况下,它是,但是您可以为您的包定义任何您想要命名的额外集合。例如,您可以将my-package[dev]用于开发需求。看看python-jose是如何定义这些额外需求的。同样,它们通常是其他Python包,但并非总是如此,因此您所要求的不是通常可以工作的东西。

现在,当你只想指定你的应用程序有什么需求时,requirements.txt与顶级依赖关系的固定版本通常会做得很好。但在你的情况下,听起来你想要完全冻结一个环境。在这种情况下,指定所有依赖项(包括传递依赖项)的版本是非常合理的做法。python -m pip freeze > requirements.txt会为你做这些(看起来你已经知道了)。

当然,这不是你想让其他人集成到自己的代码中的库,但这绝对是你在部署应用程序时可能想要做的事情。

这个博客是一个很好的关于需求文件的一般性阅读。

最新更新