--- a/PipxInterface/PipxWidget.py Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/PipxWidget.py Fri Dec 13 15:40:08 2024 +0100 @@ -80,6 +80,13 @@ ) ) ) + self.repairDependenciesButton.setIcon( + EricPixmapCache.getIcon( + os.path.join( + "PipxInterface", "icons", "repair{0}".format(iconSuffix) + ) + ) + ) self.installButton.clicked.connect(self.__installPackages) self.outdatedButton.clicked.connect(self.__checkOutdatedPackages) @@ -88,6 +95,7 @@ self.showOutdatedDependenciesButton.clicked.connect( self.__showOutdatedDependencies ) + self.repairDependenciesButton.clicked.connect(self.__repairBrokenDependencies) self.pipxMenuButton.setShowMenuInside(True) @@ -652,6 +660,16 @@ self.__resizePackagesColumns() self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems()) + @pyqtSlot() + def __repairBrokenDependencies(self): + """ + Private slot to repair broken (unmet) dependencies. + + Note: This could be necessary after a dependencies upgrade. pip will tell you. + """ + package = self.__selectedPackages()[0] + self.__pipx.repairBrokenDependencies(package) + ####################################################################### ## Main widget related methods below ####################################################################### @@ -857,6 +875,7 @@ selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole) ) ) + self.repairDependenciesButton.setEnabled(len(selectedPackageItems) == 1) def __selectedPackages(self): """