如何在requirements.txt中合理冻结Python包版本?以PyJWT[crypto]为例
问题
我通过pip install pyjwt[crypto]安装了Python包,执行pip freeze后显示出多个关联依赖包。我希望在requirements.txt中仅写入重建开发环境所需的内容,避免冗余,想询问是否只需写入PyJWT[crypto]==2.8.0即可?我担心写入过多内容会增加未来安装其他包的难度。
安装后pip输出内容:
... pyjwt[crypto] in ..\site-packages (2.8.0) cryptography>=3.4.0 in ..\site-packages (from pyjwt[crypto]) (41.0.4) cffi>=1.12 in ..\site-packages (from cryptography>=3.4.0->pyjwt[crypto]) (1.16.0) pycparser in ..\site-packages (from cffi>=1.12->cryptography>=3.4.0->pyjwt[crypto]) (2.21) ...
pip freeze输出内容:
... cffi==1.16.0 cryptography==41.0.4 pycparser==2.21 PyJWT==2.8.0 ...
答案
- 完全可以只在
requirements.txt中写入PyJWT[crypto]==2.8.0。执行pip install -r requirements.txt时,pip会自动解析并安装该包的所有依赖项(包括cryptography、cffi、pycparser等),无需手动添加这些子依赖。 - 不建议写入所有依赖的原因:硬编码子依赖的具体版本号会限制环境灵活性,未来如果其他项目依赖需要不同版本的cryptography或cffi时,固定的版本号会引发版本冲突,反而增加安装其他包的难度。
- 补充说明:如果是需要绝对一致的生产环境,才推荐用
pip freeze生成完整依赖;但开发环境优先保留直接依赖即可,让pip自动处理子依赖的兼容版本选择,减少维护负担。
内容的提问来源于stack exchange,提问作者testo
相关产品推荐
相关产品推荐

