Python 依赖管理最佳实践

标签 python package dependency-management

我有一个小的 Python 副项目,它正在经历一些成长的烦恼,想知道大型 Python 项目的人们如何管理这个问题。

该项目是部署到AWS的Python/Flask/Docker。列出的依赖项(我们直接在项目中导入)是从具有明确版本号的requirements.txt 文件安装的。我们在注意到新部署(重建 Docker/依赖项等)有时会安装较新版本的软件包后添加了版本号,从而导致项目中断。

我们现在面临的问题是,入职开发人员正在设置她的环境并面临同样的问题 - 这次是原始依赖项的子依赖项。 (例如,Flask 可能会安装 Werkskreug、Jinja2 等,如果其中一些版本错误,应用程序就会崩溃。)显而易见的解决方案是遍历每个子依赖项并在需求中列出每个包以及明确的版本。TXT。但这有点痛苦,所以我四处打听,看看人们在真实项目上做了什么。

你们不可能手动完成这一切,对吧?在 JS 中,我们有 NPM 和 package.lock 文件等等 - 它们是自动构建的。 Python 中有类似的东西吗?我是否错过了一些我们应该在这里使用的基本内容?

提前致谢

最佳答案

我编写了一个可能对此有所帮助的工具,名为 realreq. 。您可以通过 pip pip install realreq 安装它。它将通过阅读源文件并递归地指定其要求来生成您所拥有的要求。

realreq --deep -s/path/to/source 将完全指定您的依赖项及其子依赖项。请注意,如果您使用虚拟环境,则需要激活它以便 realreq 能够找到依赖项,并且必须安装它们。 (即 realreq 需要在安装了依赖项的环境中运行)。您的一位拥有设置环境的工程师可以运行它,然后将输出作为 requests.txt 文件传递​​给您的新工程师。

关于Python 依赖管理最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71694912/

相关文章:

python - 如何枚举单词的组合?

python - 从本地 SVN checkout 安装 pip 包

java - 如何通过依赖未声明其依赖项的项目一次过渡到 gradle/maven 一个项目

python - Gurobi 和 gurobipy - 使用 Python 日志记录时输出控制台加倍

python - 使用正则表达式捕获撇号

python - Docopt:重复元素后的选项被解释为重复元素

memory - 在 Go 中处理包分配的最佳实践

scala - 我应该什么时候使用包,什么时候在 Scala 中使用对象?

grails - IntelliJ 15和Grails 3:无法找到Grails软件包

javascript - 哪个包服务提供 Bower 的存储库?