如果存在包依赖冲突,如何停止 pip 安装?



我之所以这样做pip install tensorflow-gpu==1.12.3,是因为我的GPU只能支持CUDA 9,而最新的tensorflow-gpu==1.14.0至少需要CUDA 10。包依赖项之一是tensorboard

我想做pip install tensorflow.但是,最新版本警告必须安装较新版本的tensorboard,然后自动继续卸载现有版本并安装较新版本。在这种情况下,有没有办法让点停止或至少要求确认而不是自行进行?我正在尝试找出哪个是tensorflow的兼容版本,不需要与tensorflow-gpu共享的较新版本的包依赖项。

编辑

好吧,澄清一下,这不是一个特定于 TensorFlow 的问题,我只是使用它作为示例,因为我碰巧现在正在这样做。

概括地说:我安装了旧版本的包 A,它依赖于旧版本的包 B。我想安装软件包 C,它也依赖于软件包 B。但是,最新版本的 C 需要最新版本的 B。当我尝试安装 C 时,它会自动卸载较旧的 B 并安装最新版本。我该如何阻止它这样做?

现在我唯一的解决方法是安装一个 C 版本,等待它自动卸载某些内容,然后中断 C 的安装,然后重新安装卸载的依赖项包版本。然后我走到下一个旧版本C,并重复。基本上,这是一个试错过程。

有没有更合适、更优雅的解决方案?我可以接受它给出警告,即 C 需要较新版本的 B,然后在那时终止,或者在继续卸载之前提示确认,而不是在没有询问的情况下自动执行。

我正在使用 PyCharm 的 venv,所以如果有一种方法可以恢复对环境的最新更改,即卸载 C 和安装的任何新依赖项包,在我执行之前恢复到已安装的包列表pip install C,我也很好。

希望这听起来不会太复杂。 😅

我从来没有用过tensorflow做过任何工作,所以我不能帮助你这部分,但我可以建议你在测试东西时使用虚拟环境,而不是冒着破坏系统Python或升级你想要的特定版本的软件包的风险。

python -m venv env创建名为env的虚拟环境。source env/bin/activate使虚拟环境处于活动状态,deactivate离开它。

关于覆盖旧软件包,我还没有找到用于安装新版本的选项,也没有找到忽略某个软件包要求的选项。这可能是因为开发人员可以指定需要哪个版本的依赖项,因此如果pip发现过时的包,您希望安装的包可能无法使用它。

但是,您可以尝试安装最新版本的tensorflow并让它安装所需的要求,然后只需使用pip uninstall PACKAGE-NAME卸载它们并使用pip install PACKAGE-NAME==x.x.x安装所需的版本。

此外,这里有一个指南,解释了使用 CUDA 9 安装tensorflow。似乎他们正在为 CUDA 1.8 使用 9.2 版和 CUDA 1.7 的 9.1 版。

最新更新