检查要求是不是是最新的
Posted
技术标签:
【中文标题】检查要求是不是是最新的【英文标题】:Check if requirements are up to date检查要求是否是最新的 【发布时间】:2014-05-21 14:39:59 【问题描述】:我使用 pip
requirements files 来保存我的依赖列表。
我还尝试遵循管理依赖项的最佳实践,并在需求文件中提供精确的包版本。例如:
Django==1.5.1
lxml==3.0
问题是:有没有办法告诉requirements.txt
中列出的包的 Python 包索引中是否有任何更新的包版本可用?
对于这个特定的示例,当前最新的可用版本分别是 Django 和 lxml 的 1.6.2 和 3.3.4。
我试过pip install --upgrade -r requirements.txt
,但它说一切都是最新的:
$ pip install --upgrade -r requirements.txt
Requirement already up-to-date: Django==1.5.1 ...
请注意,此时我不想运行实际升级 - 我只想看看是否有可用的更新。
【问题讨论】:
【参考方案1】:Pip 内置了这个功能。假设你在你的 virtualenv 类型中:
$ pip list --outdated
psycopg2 (Current: 2.5.1 Latest: 2.5.2)
requests (Current: 2.2.0 Latest: 2.2.1)
$ pip install -U psycopg2 requests
之后,将下载并安装新版本的 psycopg2 和请求。那么:
$ pip freeze > requirements.txt
你就完成了。这不是一个命令,但优点是您不需要任何外部依赖项。
【讨论】:
这是正确答案。其他的很容易知道,但这不需要额外的工具。pip list --outdated
对于安装的许多软件包来说运行缓慢。并且pip search <package>
不是很有帮助 - 提供最新的开发版本并产生太多垃圾。是否有一个命令可以精确地检查一个/几个包的更新(实际上会发生在pip install -U
上)因此是一种模拟运行?
@kxr 刚刚检查了 pip 文档以确定,截至今天我认为这是不可能的。【参考方案2】:
刚刚找到了一个专门针对这个任务的python包——piprot,标语如下:
How rotten are your requirements?
使用起来非常简单:
$ piprot requirements.txt
Django (1.5.1) is 315 days out of date. Latest is 1.6.2
lxml (3.0) is 542 days out of date. Latest is 3.3.4
Your requirements are 857 days out of date
您还可以将pip freeze
传送到piprot
命令,这样它就可以实际检查安装在您的沙盒/虚拟环境中的软件包有多烂:
pip freeze | piprot
希望这对未来的人有所帮助。
【讨论】:
一定会喜欢 piprot 最后一天的累加。 @TobyChampion 是的,有时这有点令人沮丧 - 特别是如果你知道你无法升级超过 1 年前发布的东西:) 点冻结 | piprot 对我不起作用:piprot (0.9.6) 和 pip (1.5.6) 反正 piprot requirements.txt 效果很好 不再维护 :(【参考方案3】:既然你提到你喜欢遵循最佳实践,我猜你也在使用 virtualenv,对吗?假设是这种情况,并且由于您已经是 pinning 您的软件包,有一个名为 pip-tools 的工具可以针对您的 virtualenv 运行以检查更新。
有一个缺点,以及为什么我提到使用 virtualenv。
[该工具] 检查 PyPI 并报告可用更新。它使用列表 当前安装的软件包来检查更新,它不使用任何 requirements.txt
如果您在您的 virtualenv 中运行它,您可以轻松查看哪些软件包具有可用于您当前活动环境的更新。但是,如果您没有使用 virtualenv,则最好不要在系统上运行它,因为您的其他项目可能依赖于不同的版本(或者即使它们当前都可以正常工作,也可能无法与更新的版本一起工作)。
从提供的文档来看,使用很简单。 pip-review
向您显示可用的更新,但不会安装它们。
$ pip-review
requests==0.13.4 available (you have 0.13.2)
redis==2.4.13 available (you have 2.4.9)
rq==0.3.2 available (you have 0.3.0)
如果您也想自动安装,该工具也可以处理:$ pip-review --auto
。还有一个--interactive
开关,您可以使用它来选择性地更新软件包。
完成所有这些后,pip-tools
提供了一种使用最新版本更新您的 requirements.txt 的方法:pip-dump
。同样,这针对当前活动的环境运行,因此建议在 virtualenv 中使用。
项目的安装可以通过pip install pip-tools
完成。
作者注:我已将它用于小型 Django 项目,并且对它非常满意。不过需要注意的是,如果您将pip-tools
安装到您的虚拟环境中,当您运行pip-dump
时,您会发现它已添加到您的requirements.txt 文件中。由于我的项目很小,我总是手动删除该行。如果您有某种构建脚本,您可能希望在部署之前自动将其剥离。
【讨论】:
pip-tools
绝对是我要使用的包,谢谢指出。还要检查我提供的答案:据我了解,pip-tools
适用于您的虚拟环境,但 piprot
使用“仅要求”方法,对吗?
@alecxe 看起来就是这样。我以前没见过piprot
。这看起来也很有趣。感谢您指出。
刚刚安装了最新版本的pip-tools
,但我的路径中没有pip-review
文件。有什么变化吗?
不知道是不是一样(我也有你的问题@vadim,但在这里找到了pip-review:github.com/jgonggrijp/pip-review
pip-review 已移至另一个项目,正如@thorwhalen 已经提到并链接的那样。 Discussion as to why here【参考方案4】:
你可以在你的环境(虚拟或非虚拟)中简单地做这样的事情:
pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
【讨论】:
以上是关于检查要求是不是是最新的的主要内容,如果未能解决你的问题,请参考以下文章