diff -r 8c1445825e7b -r 0c740fcffd34 eric6/PipInterface/PipPackagesWidget.py --- a/eric6/PipInterface/PipPackagesWidget.py Thu Mar 04 17:48:09 2021 +0100 +++ b/eric6/PipInterface/PipPackagesWidget.py Thu Mar 04 19:39:54 2021 +0100 @@ -992,6 +992,9 @@ self.__installRequirementsAct = self.__pipMenu.addAction( self.tr("Install Requirements"), self.__installRequirements) + self.__reinstallPackagesAct = self.__pipMenu.addAction( + self.tr("Re-Install Selected Packages"), + self.__reinstallPackages) self.__uninstallRequirementsAct = self.__pipMenu.addAction( self.tr("Uninstall Requirements"), self.__uninstallRequirements) @@ -1043,6 +1046,7 @@ self.__installPackagesAct.setEnabled(enablePip) self.__installLocalPackageAct.setEnabled(enablePip) + self.__reinstallPackagesAct.setEnabled(enablePip) self.__installRequirementsAct.setEnabled(enablePip) self.__uninstallRequirementsAct.setEnabled(enablePip) @@ -1115,6 +1119,18 @@ self.executeInstallPackages([package], userSite=user) @pyqtSlot() + def __reinstallPackages(self): + """ + Private slot to force a re-installation of the selected packages. + """ + packages = [itm.text(0) for itm in self.packagesList.selectedItems()] + venvName = self.environmentsComboBox.currentText() + if venvName and packages: + self.__pip.installPackages(packages, venvName=venvName, + forceReinstall=True) + self.on_refreshButton_clicked() + + @pyqtSlot() def __installRequirements(self): """ Private slot to install packages as given in a requirements file.