我想把这个包含在我的容器中:
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
会为你做这些(看起来你已经知道了)。
当然,这不是你想让其他人集成到自己的代码中的库,但这绝对是你在部署应用程序时可能想要做的事情。
这个博客是一个很好的关于需求文件的一般性阅读。