有没有办法更新一个包,并递归地更新它使用的所有包?

Is there a way to update a package and, recursively, all the packages it uses?

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

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 <strong>--recursive</strong> myutils 或类似的操作,以便 inner包也安装了吗?我能想到的唯一解决方法是以 package>=that_version.X.y.z 的形式定义最小包版本,但是 it does not seem to be the most recommended way to do it.

您可以在 Unix 上使用以下命令行强制升级所有已安装的软件包,如 OS

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

pip 最近(几年前我检查了一下)更改了 --upgrade 的默认策略——它用于升级包和任何可传递的包,但改为只升级包

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

要恢复旧的“升级一切”方法,您可以使用 pip install --upgrade --upgrade-strategy=eager PKG(默认策略是 only-if-needed