到目前为止,我已经使用了(通过如何使用 pip 升级所有 Python 包)
pip3 list --format freeze --outdated | cut -d= -f1 | xargs pip3 install --upgrade-strategy eager --upgrade
Run Code Online (Sandbox Code Playgroud)
升级我所有的 Python pip 包。到目前为止,它对我来说效果很好 - 除了一次,当我收到某种冲突消息时,不幸的是我没有保留它的副本;我的猜测是,这与此处提到的类似: https://pip.pypa.io/en/stable/user_guide/#fixing-conflicting-dependencies:
Due to conflicting dependencies pip cannot install
package_coffee and package_tea:
- package_coffee depends on package_water<3.0.0,>=2.4.2
- package_tea depends on package_water==2.3.1
Run Code Online (Sandbox Code Playgroud)
无论如何,现在我只是尝试安装voila我的 Jupyter 安装,结果如下:
(notebook) user@server:/home/web/Jupyter$ pip3 install voila
...
Installing collected packages: jupyter-client, voila
Attempting uninstall: jupyter-client
Found existing installation: jupyter-client 7.0.3
Uninstalling jupyter-client-7.0.3:
Successfully uninstalled jupyter-client-7.0.3
Successfully installed jupyter-client-6.1.12 voila-0.2.13
Run Code Online (Sandbox Code Playgroud)
换句话说:我jupyter-client-7.0.3之前已经安装过最新版本;但现在我想安装voila,由于要求,最新版本被卸载,并安装了与 兼容的voila早期版本。6.1.12voila
所以现在如果我想检查过时的软件包,我会如预期的那样jupyter-client列出:
(notebook) user@server:/home/web/Jupyter$ pip3 list --format freeze --outdated
jupyter-client==6.1.12
Run Code Online (Sandbox Code Playgroud)
...但是,如果我运行完整的管道命令,pip3 list --format freeze --outdated | cut -d= -f1 | xargs pip3 install --upgrade-strategy eager --upgrade那么它会想要升级jupyter-client到7.0.3,然后就会崩溃voila(我猜,我不敢尝试)。
那么,是否有一个升级命令,可以处理这样的情况,并在升级过程中出现这种状态时,阻止更改并给我一个通知?比如说:
警告:jupyter-client=6.1.12(最新版本 7.0.3)已升级 - 但是,安装该软件包会导致与当前安装的
voila=0.2.13软件包发生冲突;不继续进行此升级。无论如何,要强制进行此升级,请使用 [...]
由于重叠(子)依赖关系,在 python 中升级包从来都不是一件容易的事。有一些工具可以尝试帮助您进行管理。在我目前的工作中,我们使用pip-tools。在一些项目中我们使用诗歌,但我对其处理不太满意。
对于 pip-tools,您在文件中定义顶级包requirements.in,然后解析子(子子)依赖项并将它们输出到文件中requirements.txt。这样做的好处是您只需担心主包。如果需要,您仍然可以升级子依赖项。
长话短说; 盲目更新所有软件包很可能永远不会达到预期或预期的效果。软件包已升级,但停止工作,或者它们确实可以工作,但不能与已更新的另一个软件包一起使用,因为它们需要该软件包的较低版本。
我的建议是从您的主包开始,然后使用提到的工具之一从那里开始构建。对此没有灵丹妙药。依赖地狱在Python中是一个非常真实的事情。
| 归档时间: |
|
| 查看次数: |
9819 次 |
| 最近记录: |