有没有一种方法可以更新软件包以及递归地更新它使用的所有软件包?

问题描述

我创建了一个供内部使用的软件包。在我的安装文件中,我有类似的内容

from setuptools import setup,find_packages

setup(
    name='myutils',version='0.3',description='Set of utils for these projects',packages=find_packages(),install_requires=[
        'requests','arrow','slackclient'
    ]
)

它运行良好,并且可以顺利安装install_requires中的所有软件包。

但是,有时其中一些软件包可能需要更新,因此我希望pip install --upgrade myutils更新install_requires中的软件包,而不需要。

是否可以执行某种pip install --upgrade --recursive myutils或类似的方式,以便同时安装 inner 软件包?我能想到的唯一解决方法是以package>=that_version.X.y.z的形式定义最低软件包版本,但以it does not seem to be the most recommended way to do it的形式定义。

解决方法

您可以在Unix等操作系统上使用以下命令行强制升级所有已安装的软件包

pip freeze | sed -r -e 's/([^=]+)==.*/\1/' | xargs pip install --upgrade
,

最近(我几年前检查过),pip更改了--upgrade的默认策略-它曾经用于升级软件包和所有传递软件包,但改为仅升级软件包

幸运的是,添加了一个新选项来控制此行为:--upgrade-strategy

要还原旧的“升级所有内容”方法,可以使用pip install --upgrade --upgrade-strategy=eager PKG(默认策略为only-if-needed