Added a shortcut button to repair broken dependencies of the selected package. release-10.6.1

Fri, 13 Dec 2024 15:40:08 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 13 Dec 2024 15:40:08 +0100
changeset 111
8ace016a3eee
parent 110
6c7e6142be69
child 112
e020e3c3c821

Added a shortcut button to repair broken dependencies of the selected package.

PKGLIST file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxDependenciesDialog.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html file | annotate | diff | comparison | revisions
PipxInterface/Pipx.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.ui file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxWidget.py file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_de.qm file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_de.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_empty.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_en.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_es.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_ru.ts file | annotate | diff | comparison | revisions
PipxInterface/icons/repair-dark.svg file | annotate | diff | comparison | revisions
PipxInterface/icons/repair-light.svg file | annotate | diff | comparison | revisions
PluginPipxInterface.epj file | annotate | diff | comparison | revisions
PluginPipxInterface.py file | annotate | diff | comparison | revisions
PluginPipxInterface.zip file | annotate | diff | comparison | revisions
changelog.md file | annotate | diff | comparison | revisions
--- a/PKGLIST	Tue Dec 10 17:53:34 2024 +0100
+++ b/PKGLIST	Fri Dec 13 15:40:08 2024 +0100
@@ -41,4 +41,6 @@
 PipxInterface/icons/pipx96.svg
 PipxInterface/icons/pipxOutdated22.svg
 PipxInterface/icons/pipxOutdated96.svg
+PipxInterface/icons/repair-dark.svg
+PipxInterface/icons/repair-light.svg
 PluginPipxInterface.py
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html	Fri Dec 13 15:40:08 2024 +0100
@@ -77,10 +77,18 @@
 <td>Private method handling the pipx process output of a check for an outdated package.</td>
 </tr>
 <tr>
+<td><a href="#Pipx.__getBrokenDependencies">__getBrokenDependencies</a></td>
+<td></td>
+</tr>
+<tr>
 <td><a href="#Pipx.__getPackageDependencies">__getPackageDependencies</a></td>
 <td>Private method to get a list of dependencies of a given package.</td>
 </tr>
 <tr>
+<td><a href="#Pipx.__getPackageInterpreter">__getPackageInterpreter</a></td>
+<td>Private method to determine the executable path of the python interpreter of a package.</td>
+</tr>
+<tr>
 <td><a href="#Pipx.__getPipxExecutable">__getPipxExecutable</a></td>
 <td>Private method to get the path name of the pipx executable.</td>
 </tr>
@@ -169,6 +177,10 @@
 <td>Public method to reinstall the given package with given options.</td>
 </tr>
 <tr>
+<td><a href="#Pipx.repairBrokenDependencies">repairBrokenDependencies</a></td>
+<td>Public method to get repair broken or unmet package dependencies.</td>
+</tr>
+<tr>
 <td><a href="#Pipx.shutdown">shutdown</a></td>
 <td>Public method to perform shutdown actions.</td>
 </tr>
@@ -290,6 +302,10 @@
 output of the pipx process or an error message
 </dd>
 </dl>
+<a NAME="Pipx.__getBrokenDependencies" ID="Pipx.__getBrokenDependencies"></a>
+<h4>Pipx.__getBrokenDependencies</h4>
+<b>__getBrokenDependencies</b>(<i>dependencies</i>)
+
 <a NAME="Pipx.__getPackageDependencies" ID="Pipx.__getPackageDependencies"></a>
 <h4>Pipx.__getPackageDependencies</h4>
 <b>__getPackageDependencies</b>(<i>package, uptodate=False, outdated=False</i>)
@@ -324,6 +340,33 @@
 list[dict[str: str]]
 </dd>
 </dl>
+<a NAME="Pipx.__getPackageInterpreter" ID="Pipx.__getPackageInterpreter"></a>
+<h4>Pipx.__getPackageInterpreter</h4>
+<b>__getPackageInterpreter</b>(<i>package</i>)
+<p>
+        Private method to determine the executable path of the python interpreter
+        of a package.
+</p>
+
+<dl>
+
+<dt><i>package</i> (str)</dt>
+<dd>
+name of the package
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+Python interpreter path
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Pipx.__getPipxExecutable" ID="Pipx.__getPipxExecutable"></a>
 <h4>Pipx.__getPipxExecutable</h4>
 <b>__getPipxExecutable</b>(<i></i>)
@@ -834,6 +877,20 @@
             on the system (defaults to False)
 </dd>
 </dl>
+<a NAME="Pipx.repairBrokenDependencies" ID="Pipx.repairBrokenDependencies"></a>
+<h4>Pipx.repairBrokenDependencies</h4>
+<b>repairBrokenDependencies</b>(<i>package</i>)
+<p>
+        Public method to get repair broken or unmet package dependencies.
+</p>
+
+<dl>
+
+<dt><i>package</i> (str)</dt>
+<dd>
+name of the package
+</dd>
+</dl>
 <a NAME="Pipx.shutdown" ID="Pipx.shutdown"></a>
 <h4>Pipx.shutdown</h4>
 <b>shutdown</b>(<i></i>)
@@ -900,7 +957,7 @@
 </dl>
 <a NAME="Pipx.upgradePackageDependencies" ID="Pipx.upgradePackageDependencies"></a>
 <h4>Pipx.upgradePackageDependencies</h4>
-<b>upgradePackageDependencies</b>(<i>package</i>)
+<b>upgradePackageDependencies</b>(<i>package, dependencies=None</i>)
 <p>
         Public method to upgrade the dependencies of the given package.
 </p>
@@ -911,6 +968,11 @@
 <dd>
 name of the package
 </dd>
+<dt><i>dependencies</i> (list of str or None (optional))</dt>
+<dd>
+list of dependencies to be upgraded or None to
+            upgrade all outdated dependencies (defaults to None)
+</dd>
 </dl>
 <a NAME="Pipx.upgradeSharedLibraries" ID="Pipx.upgradeSharedLibraries"></a>
 <h4>Pipx.upgradeSharedLibraries</h4>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxDependenciesDialog.html	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxDependenciesDialog.html	Fri Dec 13 15:40:08 2024 +0100
@@ -46,7 +46,8 @@
 <tr><td>DependencyColumn</td></tr>
 <tr><td>InstalledVersionColumn</td></tr>
 <tr><td>OutdatedMode</td></tr>
-<tr><td>UpgradeDependenciesAction</td></tr>
+<tr><td>UpgradeAllDependenciesAction</td></tr>
+<tr><td>UpgradeSelectedDependenciesAction</td></tr>
 <tr><td>UptodateMode</td></tr>
 </table>
 
@@ -66,9 +67,17 @@
 <td>Private method to resize the columns of the dependencies list.</td>
 </tr>
 <tr>
+<td><a href="#PipxDependenciesDialog.getDependencies">getDependencies</a></td>
+<td>Public method to get the list of selected or all dependencies.</td>
+</tr>
+<tr>
 <td><a href="#PipxDependenciesDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot handling a button click of the button box.</td>
 </tr>
+<tr>
+<td><a href="#PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged">on_dependenciesList_itemSelectionChanged</a></td>
+<td>Private slot to update the UI when the package selection changes.</td>
+</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -110,6 +119,33 @@
         Private method to resize the columns of the dependencies list.
 </p>
 
+<a NAME="PipxDependenciesDialog.getDependencies" ID="PipxDependenciesDialog.getDependencies"></a>
+<h4>PipxDependenciesDialog.getDependencies</h4>
+<b>getDependencies</b>(<i>selectedOnly=True</i>)
+<p>
+        Public method to get the list of selected or all dependencies.
+</p>
+
+<dl>
+
+<dt><i>selectedOnly</i> (boolTYPE (optional))</dt>
+<dd>
+flag indicated to get only the selected dependencies
+            (defaults to True)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of names of dependencies
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
 <a NAME="PipxDependenciesDialog.on_buttonBox_clicked" ID="PipxDependenciesDialog.on_buttonBox_clicked"></a>
 <h4>PipxDependenciesDialog.on_buttonBox_clicked</h4>
 <b>on_buttonBox_clicked</b>(<i>button</i>)
@@ -124,6 +160,13 @@
 reference to the clicked button
 </dd>
 </dl>
+<a NAME="PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged" ID="PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged"></a>
+<h4>PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged</h4>
+<b>on_dependenciesList_itemSelectionChanged</b>(<i></i>)
+<p>
+        Private slot to update the UI when the package selection changes.
+</p>
+
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Fri Dec 13 15:40:08 2024 +0100
@@ -150,6 +150,10 @@
 <td>Private slot to force a re-installation of the selected package.</td>
 </tr>
 <tr>
+<td><a href="#PipxWidget.__repairBrokenDependencies">__repairBrokenDependencies</a></td>
+<td>Private slot to repair broken (unmet) dependencies.</td>
+</tr>
+<tr>
 <td><a href="#PipxWidget.__resizePackagesColumns">__resizePackagesColumns</a></td>
 <td>Private slot to resize the columns of the packages list.</td>
 </tr>
@@ -556,6 +560,16 @@
         Private slot to force a re-installation of the selected package.
 </p>
 
+<a NAME="PipxWidget.__repairBrokenDependencies" ID="PipxWidget.__repairBrokenDependencies"></a>
+<h4>PipxWidget.__repairBrokenDependencies</h4>
+<b>__repairBrokenDependencies</b>(<i></i>)
+<p>
+        Private slot to repair broken (unmet) dependencies.
+</p>
+<p>
+        Note: This could be necessary after a dependencies upgrade. pip will tell you.
+</p>
+
 <a NAME="PipxWidget.__resizePackagesColumns" ID="PipxWidget.__resizePackagesColumns"></a>
 <h4>PipxWidget.__resizePackagesColumns</h4>
 <b>__resizePackagesColumns</b>(<i></i>)
@@ -668,11 +682,19 @@
 
 <a NAME="PipxWidget.__upgradeDependencies" ID="PipxWidget.__upgradeDependencies"></a>
 <h4>PipxWidget.__upgradeDependencies</h4>
-<b>__upgradeDependencies</b>(<i></i>)
+<b>__upgradeDependencies</b>(<i>dependencies=None</i>)
 <p>
         Private slot to upgrade the outdated dependencies of the selected package.
 </p>
 
+<dl>
+
+<dt><i>dependencies</i> (list of str or None (optional))</dt>
+<dd>
+list of dependencies to be upgraded or None to
+            upgrade all outdated dependencies (defaults to None)
+</dd>
+</dl>
 <a NAME="PipxWidget.__upgradePackage" ID="PipxWidget.__upgradePackage"></a>
 <h4>PipxWidget.__upgradePackage</h4>
 <b>__upgradePackage</b>(<i></i>)
--- a/PipxInterface/Pipx.py	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/Pipx.py	Fri Dec 13 15:40:08 2024 +0100
@@ -14,11 +14,12 @@
 import pathlib
 import sysconfig
 
+from packaging.specifiers import InvalidSpecifier, SpecifierSet
 from PyQt6.QtCore import QObject, QProcess, pyqtSignal
 
 from eric7 import Preferences
 from eric7.EricWidgets import EricMessageBox
-from eric7.SystemUtilities import OSUtilities
+from eric7.SystemUtilities import OSUtilities, PythonUtilities
 
 try:
     from eric7.EricCore.EricProcess import EricProcess
@@ -818,3 +819,148 @@
                 self.tr("Upgrade Dependencies"),
                 self.tr("""All dependencies are already up-to-date."""),
             )
+
+    def __getPackageInterpreter(self, package):
+        """
+        Private method to determine the executable path of the python interpreter
+        of a package.
+
+        @param package name of the package
+        @type str
+        @return Python interpreter path
+        @rtype str
+        """
+        from pipx.paths import ctx  # noqa: I102
+        from pipx.venv import Venv  # noqa: I102
+
+        packagePath = ctx.venvs / package
+        _venv = Venv(packagePath)
+        return str(_venv.python_path)
+##
+    ##def __addDependency(self, dependency, parent):
+        ##"""
+        ##Private method to add a dependency branch to a given parent.
+##
+        ##@param dependency dependency to be added
+        ##@type dict
+        ##@param parent reference to the parent item
+        ##@type QTreeWidget or QTreeWidgetItem
+        ##"""
+        ##itm = QTreeWidgetItem(
+            ##parent,
+            ##[
+                ##dependency["package_name"],
+                ##dependency["installed_version"],
+                ##dependency["required_version"],
+            ##],
+        ##)
+        ##itm.setExpanded(True)
+##
+        ##if dependency["installed_version"] == "?":
+            ##itm.setText(PipPackagesWidget.DepInstalledVersionColumn, self.tr("unknown"))
+##
+        ##if dependency["required_version"].lower() not in ("any", "?"):
+            ##spec = (
+                ##"=={0}".format(dependency["required_version"])
+                ##if dependency["required_version"][0] in "0123456789"
+                ##else dependency["required_version"]
+            ##)
+            ##try:
+                ##specifierSet = SpecifierSet(specifiers=spec)
+                ##if not specifierSet.contains(dependency["installed_version"]):
+                    ##itm.setIcon(
+                        ##PipPackagesWidget.DepRequiredVersionColumn,
+                        ##EricPixmapCache.getIcon("warning"),
+                    ##)
+            ##except InvalidSpecifier:
+                ##itm.setText(
+                    ##PipPackagesWidget.DepRequiredVersionColumn,
+                    ##dependency["required_version"],
+                ##)
+##
+        ##elif dependency["required_version"].lower() == "any":
+            ##itm.setText(PipPackagesWidget.DepRequiredVersionColumn, self.tr("any"))
+##
+        ##elif dependency["required_version"] == "?":
+            ##itm.setText(PipPackagesWidget.DepRequiredVersionColumn, self.tr("unknown"))
+##
+        ### recursively add sub-dependencies
+        ##for dep in dependency["dependencies"]:
+            ##self.__addDependency(dep, itm)
+
+    def __getBrokenDependencies(self, dependencies):
+        brokenDependecies = []
+
+        for dependency in dependencies:
+            if dependency["required_version"].lower() not in ("any", "?"):
+                spec = (
+                    "=={0}".format(dependency["required_version"])
+                    if dependency["required_version"][0] in "0123456789"
+                    else dependency["required_version"]
+                )
+                with contextlib.suppress(InvalidSpecifier):
+                    specifierSet = SpecifierSet(specifiers=spec)
+                    if not specifierSet.contains(dependency["installed_version"]):
+                        brokenDependecies.append(f"{dependency["package_name"]}{spec}")
+
+            # recursively add sub-dependencies
+            brokenDependecies.extend(
+                self.__getBrokenDependencies(dependency["dependencies"])
+            )
+
+        return brokenDependecies
+
+    def repairBrokenDependencies(self, package):
+        """
+        Public method to get repair broken or unmet package dependencies.
+
+        @param package name of the package
+        @type str
+        """
+        dependencies = []
+
+        interpreter = self.__getPackageInterpreter(package=package)
+        if interpreter:
+            args = ["-m", "pipdeptree", "--python", interpreter, "--json-tree"]
+
+            proc = QProcess()
+            proc.start(PythonUtilities.getPythonExecutable(), args)
+            if proc.waitForStarted(15000) and proc.waitForFinished(30000):
+                output = str(
+                    proc.readAllStandardOutput(),
+                    Preferences.getSystem("IOEncoding"),
+                    "replace",
+                ).strip()
+                with contextlib.suppress(json.JSONDecodeError):
+                    dependencies = json.loads(output)
+
+            brokenDependecies = self.__getBrokenDependencies(dependencies)
+            if brokenDependecies:
+                args = [
+                    "runpip",
+                    package,
+                    "install",
+                    "--prefer-binary",
+                ] + brokenDependecies
+
+                dia = PipxExecDialog(
+                    self.tr("Repair Broken Dependencies"), parent=self.__ui
+                )
+                res = dia.startProcess(self.__getPipxExecutable(), args)
+                if res:
+                    dia.exec()
+            else:
+                EricMessageBox.information(
+                    self.__ui,
+                    self.tr("Repair Broken Dependencies"),
+                    self.tr("There are no broken dependencies."),
+                )
+        else:
+            EricMessageBox.critical(
+                self.__ui,
+                self.tr("Repair Broken Dependencies"),
+                self.tr(
+                    "<p>The interpreter for package <b>{0}</b> could not be determined."
+                    " Aborting...</p>"
+                ).format(package),
+            )
--- 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):
         """
--- a/PipxInterface/PipxWidget.ui	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/PipxWidget.ui	Fri Dec 13 15:40:08 2024 +0100
@@ -185,6 +185,13 @@
       </widget>
      </item>
      <item>
+      <widget class="QToolButton" name="repairDependenciesButton">
+       <property name="toolTip">
+        <string>Press to repair broken dependencies of the selected package.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="horizontalSpacer_3">
        <property name="orientation">
         <enum>Qt::Orientation::Horizontal</enum>
@@ -244,6 +251,7 @@
   <tabstop>upgradeButton</tabstop>
   <tabstop>uninstallButton</tabstop>
   <tabstop>showOutdatedDependenciesButton</tabstop>
+  <tabstop>repairDependenciesButton</tabstop>
   <tabstop>pipxMenuButton</tabstop>
   <tabstop>venvsPathEdit</tabstop>
   <tabstop>applicationsPathEdit</tabstop>
--- a/PipxInterface/Ui_PipxWidget.py	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/Ui_PipxWidget.py	Fri Dec 13 15:40:08 2024 +0100
@@ -90,6 +90,9 @@
         self.showOutdatedDependenciesButton = QtWidgets.QToolButton(parent=PipxWidget)
         self.showOutdatedDependenciesButton.setObjectName("showOutdatedDependenciesButton")
         self.horizontalLayout_2.addWidget(self.showOutdatedDependenciesButton)
+        self.repairDependenciesButton = QtWidgets.QToolButton(parent=PipxWidget)
+        self.repairDependenciesButton.setObjectName("repairDependenciesButton")
+        self.horizontalLayout_2.addWidget(self.repairDependenciesButton)
         spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
         self.horizontalLayout_2.addItem(spacerItem3)
         self.verticalLayout.addLayout(self.horizontalLayout_2)
@@ -107,7 +110,8 @@
         PipxWidget.setTabOrder(self.outdatedButton, self.upgradeButton)
         PipxWidget.setTabOrder(self.upgradeButton, self.uninstallButton)
         PipxWidget.setTabOrder(self.uninstallButton, self.showOutdatedDependenciesButton)
-        PipxWidget.setTabOrder(self.showOutdatedDependenciesButton, self.pipxMenuButton)
+        PipxWidget.setTabOrder(self.showOutdatedDependenciesButton, self.repairDependenciesButton)
+        PipxWidget.setTabOrder(self.repairDependenciesButton, self.pipxMenuButton)
         PipxWidget.setTabOrder(self.pipxMenuButton, self.venvsPathEdit)
         PipxWidget.setTabOrder(self.venvsPathEdit, self.applicationsPathEdit)
         PipxWidget.setTabOrder(self.applicationsPathEdit, self.manPagesPathEdit)
@@ -126,6 +130,7 @@
         self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected package."))
         self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected package."))
         self.showOutdatedDependenciesButton.setToolTip(_translate("PipxWidget", "Press to show a dialog with the outdated dependencies."))
+        self.repairDependenciesButton.setToolTip(_translate("PipxWidget", "Press to repair broken dependencies of the selected package."))
         self.packagesList.setSortingEnabled(True)
         self.packagesList.headerItem().setText(0, _translate("PipxWidget", "Package/Application"))
         self.packagesList.headerItem().setText(1, _translate("PipxWidget", "Version"))
Binary file PipxInterface/i18n/pipx_de.qm has changed
--- a/PipxInterface/i18n/pipx_de.ts	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/i18n/pipx_de.ts	Fri Dec 13 15:40:08 2024 +0100
@@ -4,150 +4,167 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="273" />
-      <location filename="../Pipx.py" line="163" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Meldung: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="285" />
-      <location filename="../Pipx.py" line="277" />
-      <location filename="../Pipx.py" line="166" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;pipx wurde mit einem Fehler beendet ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="175" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation>pipx endete nicht innerhalb 30 Sekunden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
-      <location filename="../Pipx.py" line="177" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation>pipx konnte nicht gestarted werden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation>pipx Startfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="236" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation>pipx Laufzeitfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="237" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der pipx Prozess meldete einen Fehler.&lt;/p&gt;&lt;p&gt;Fehler: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="257" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation>pipx endete nicht innerhalb {0} Sekunden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="263" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation>pipx Zeitüberschreitungsfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="284" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation>pipx Ausführungsfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="409" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="454" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation>Alle Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="504" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation>Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="535" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation>Alle Pakete neu installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation>Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="558" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation>Alle Pakete deinstallieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation>Paket aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation>Alle Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="595" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation>Gemeinsame Bibliotheken aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="609" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation>Interpreter aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="622" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation>Ungenutzte Interpreter entfernen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="633" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation>PATH-Änderungen sicherstellen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="672" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation>Prüfe veraltete Pakete</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="673" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Status des Paketes &lt;b&gt;{0}&lt;/b&gt; konnte nicht bestimmt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="734" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation>Paketabhängigkeiten abrufen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="735" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Status der Abhängigkeiten des Pakets &lt;b&gt;{0}&lt;/b&gt; konnte nicht ermittelt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="818" />
-      <location filename="../Pipx.py" line="811" />
+      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="812" />
       <source>Upgrade Dependencies</source>
       <translation>Abhängigkeiten aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="820" />
       <source>All dependencies are already up-to-date.</source>
       <translation>Alle Abhängigkeiten sind bereits aktuell.</translation>
     </message>
+    <message>
+      <location filename="../Pipx.py" line="961" />
+      <location filename="../Pipx.py" line="955" />
+      <location filename="../Pipx.py" line="947" />
+      <source>Repair Broken Dependencies</source>
+      <translation>Defekte Abhängigkeiten reparieren</translation>
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="956" />
+      <source>There are no broken dependencies.</source>
+      <translation>Es gibt keine defekten Abhängigkeiten.</translation>
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="962" />
+      <source>&lt;p&gt;The interpreter for package &lt;b&gt;{0}&lt;/b&gt; could not be determined. Aborting...&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Der Interpreter für das Paket &lt;b&gt;{0}&lt;/b&gt; konnte nicht ermittelt werden. Abbruch...&lt;/p&gt;</translation>
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -582,229 +599,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="137" />
+      <location filename="../PipxWidget.py" line="145" />
       <source>Install</source>
       <translation>Installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="270" />
-      <location filename="../PipxWidget.py" line="139" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="147" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="289" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="297" />
+      <location filename="../PipxWidget.py" line="150" />
       <source>Install All Packages</source>
       <translation>Alle Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="146" />
+      <location filename="../PipxWidget.py" line="154" />
       <source>Re-Install Selected Package</source>
       <translation>Ausgewähltes Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="387" />
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="395" />
+      <location filename="../PipxWidget.py" line="157" />
       <source>Re-Install All Packages</source>
       <translation>Alle Pakete neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="345" />
-      <location filename="../PipxWidget.py" line="336" />
-      <location filename="../PipxWidget.py" line="324" />
-      <location filename="../PipxWidget.py" line="308" />
-      <location filename="../PipxWidget.py" line="153" />
+      <location filename="../PipxWidget.py" line="353" />
+      <location filename="../PipxWidget.py" line="344" />
+      <location filename="../PipxWidget.py" line="332" />
+      <location filename="../PipxWidget.py" line="316" />
+      <location filename="../PipxWidget.py" line="161" />
       <source>Create Spec Metadata File</source>
       <translation>Erzeuge Spec-Metadaten-Datei</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="160" />
+      <location filename="../PipxWidget.py" line="168" />
       <source>Upgrade</source>
       <translation>Aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="170" />
       <source>Check Outdated Packages</source>
       <translation>Prüfe veraltete Pakete</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="475" />
-      <location filename="../PipxWidget.py" line="166" />
+      <location filename="../PipxWidget.py" line="483" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Upgrade Selected Package</source>
       <translation>Ausgewähltes Paket aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="500" />
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="508" />
+      <location filename="../PipxWidget.py" line="177" />
       <source>Upgrade All Packages</source>
       <translation>Alle Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Upgrade Shared Libraries</source>
       <translation>Gemeinsame Bibliotheken aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="188" />
       <source>Uninstall</source>
       <translation>Deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="182" />
+      <location filename="../PipxWidget.py" line="190" />
       <source>Uninstall Selected Package</source>
       <translation>Ausgewähltes Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="542" />
-      <location filename="../PipxWidget.py" line="185" />
+      <location filename="../PipxWidget.py" line="550" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Uninstall All Packages</source>
       <translation>Alle Pakete deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="192" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Dependencies</source>
       <translation>Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="194" />
+      <location filename="../PipxWidget.py" line="202" />
       <source>Show All Dependencies</source>
       <translation>Zeige Alle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="197" />
+      <location filename="../PipxWidget.py" line="205" />
       <source>Show Outdated Dependencies</source>
       <translation>Zeige Veraltete Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="200" />
+      <location filename="../PipxWidget.py" line="208" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Zeige Aktuelle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="204" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Upgrade All Dependencies</source>
       <translation>Alle Abhängigkeiten aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="223" />
+      <location filename="../PipxWidget.py" line="231" />
       <source>Standalone Interpreters</source>
       <translation>Eigenständige Interpreter</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="227" />
+      <location filename="../PipxWidget.py" line="235" />
       <source>Ensure PATH Modifications</source>
       <translation>PATH-Änderungen sicherstellen</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="230" />
+      <location filename="../PipxWidget.py" line="238" />
       <source>Configure...</source>
       <translation>Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="310" />
+      <location filename="../PipxWidget.py" line="318" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>JSON Dateien (*.json);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="311" />
+      <location filename="../PipxWidget.py" line="319" />
       <source>JSON Files (*.json)</source>
       <translation>JSON-Dateien (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="325" />
+      <location filename="../PipxWidget.py" line="333" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="337" />
+      <location filename="../PipxWidget.py" line="345" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Spec-Metadaten-Datei &lt;b&gt;{0}&lt;/b&gt; wurde erfolgreich erzeugt.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="346" />
+      <location filename="../PipxWidget.py" line="354" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Spec-Metadaten-Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht erzeugt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="362" />
+      <location filename="../PipxWidget.py" line="370" />
       <source>Re-Install Package</source>
       <translation>Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
+      <location filename="../PipxWidget.py" line="371" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Soll das Paket &lt;b&gt;{0}&lt;/b&gt; wirklich neu installiert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="388" />
+      <location filename="../PipxWidget.py" line="396" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>Sollen wirklich alle Pakete neu installiert werden?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="476" />
+      <location filename="../PipxWidget.py" line="484" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das ausgewählte Paket kann nicht aktualisiert werden, da einige seiner Anwendungen ausgeführt werden.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Beende diese Anwendungen und versuche es erneut.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
+      <location filename="../PipxWidget.py" line="509" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Pakete können nicht aktualisiert werden, da einige ihrer Anwendungen ausgeführt werden.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Beende diese Anwendungen und versuche es erneut.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="526" />
+      <location filename="../PipxWidget.py" line="534" />
       <source>Uninstall Package</source>
       <translation>Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="527" />
+      <location filename="../PipxWidget.py" line="535" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Soll das Paket &lt;b&gt;{0}&lt;/b&gt; wirklich deinstalliert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="543" />
+      <location filename="../PipxWidget.py" line="551" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Sollen wirklich &lt;b&gt;ALLE&lt;/b&gt; Pakete deinstalliert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="664" />
+      <location filename="../PipxWidget.py" line="682" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;pipx Version {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="712" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="702" />
+      <location filename="../PipxWidget.py" line="720" />
       <source>package and some dependencies outdated</source>
       <translation>Paket und einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="723" />
       <source>package outdated</source>
       <translation>Paket veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="719" />
+      <location filename="../PipxWidget.py" line="737" />
       <source>some dependencies outdated</source>
       <translation>einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="734" />
+      <location filename="../PipxWidget.py" line="752" />
       <source>everything up-to-date</source>
       <translation>alles aktuell</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="761" />
+      <location filename="../PipxWidget.py" line="779" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="763" />
+      <location filename="../PipxWidget.py" line="781" />
       <source> (standalone)</source>
       <translation> (eigenständig)</translation>
     </message>
@@ -865,6 +882,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to repair broken dependencies of the selected package.</source>
+      <translation>Drücken, um defekte Abhängigkeiten des ausgewählten Paketes zu reparieren.</translation>
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Paket/Anwendung</translation>
     </message>
--- a/PipxInterface/i18n/pipx_empty.ts	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/i18n/pipx_empty.ts	Fri Dec 13 15:40:08 2024 +0100
@@ -4,150 +4,167 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="273" />
-      <location filename="../Pipx.py" line="163" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="285" />
-      <location filename="../Pipx.py" line="277" />
-      <location filename="../Pipx.py" line="166" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="175" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
-      <location filename="../Pipx.py" line="177" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="236" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="237" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="257" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="263" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="284" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="409" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="454" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="504" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="535" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="558" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="595" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="609" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="622" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="633" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="672" />
-      <source>Check Outdated Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Pipx.py" line="673" />
-      <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <source>Check Outdated Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="734" />
-      <source>Get Package Dependencies</source>
+      <location filename="../Pipx.py" line="674" />
+      <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Pipx.py" line="735" />
+      <source>Get Package Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="818" />
-      <location filename="../Pipx.py" line="811" />
+      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="812" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="820" />
       <source>All dependencies are already up-to-date.</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="961" />
+      <location filename="../Pipx.py" line="955" />
+      <location filename="../Pipx.py" line="947" />
+      <source>Repair Broken Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="956" />
+      <source>There are no broken dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="962" />
+      <source>&lt;p&gt;The interpreter for package &lt;b&gt;{0}&lt;/b&gt; could not be determined. Aborting...&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -582,229 +599,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="137" />
+      <location filename="../PipxWidget.py" line="145" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="270" />
-      <location filename="../PipxWidget.py" line="139" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="147" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="289" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="297" />
+      <location filename="../PipxWidget.py" line="150" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="146" />
+      <location filename="../PipxWidget.py" line="154" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="387" />
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="395" />
+      <location filename="../PipxWidget.py" line="157" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="345" />
-      <location filename="../PipxWidget.py" line="336" />
-      <location filename="../PipxWidget.py" line="324" />
-      <location filename="../PipxWidget.py" line="308" />
-      <location filename="../PipxWidget.py" line="153" />
+      <location filename="../PipxWidget.py" line="353" />
+      <location filename="../PipxWidget.py" line="344" />
+      <location filename="../PipxWidget.py" line="332" />
+      <location filename="../PipxWidget.py" line="316" />
+      <location filename="../PipxWidget.py" line="161" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="160" />
+      <location filename="../PipxWidget.py" line="168" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="170" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="475" />
-      <location filename="../PipxWidget.py" line="166" />
+      <location filename="../PipxWidget.py" line="483" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="500" />
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="508" />
+      <location filename="../PipxWidget.py" line="177" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="188" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="182" />
+      <location filename="../PipxWidget.py" line="190" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="542" />
-      <location filename="../PipxWidget.py" line="185" />
+      <location filename="../PipxWidget.py" line="550" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="192" />
-      <source>Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipxWidget.py" line="194" />
-      <source>Show All Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipxWidget.py" line="197" />
-      <source>Show Outdated Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipxWidget.py" line="200" />
+      <source>Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="202" />
+      <source>Show All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="205" />
+      <source>Show Outdated Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="208" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="204" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="223" />
+      <location filename="../PipxWidget.py" line="231" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="227" />
+      <location filename="../PipxWidget.py" line="235" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="230" />
+      <location filename="../PipxWidget.py" line="238" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="310" />
+      <location filename="../PipxWidget.py" line="318" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="311" />
+      <location filename="../PipxWidget.py" line="319" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="325" />
+      <location filename="../PipxWidget.py" line="333" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="337" />
+      <location filename="../PipxWidget.py" line="345" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="346" />
+      <location filename="../PipxWidget.py" line="354" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="362" />
+      <location filename="../PipxWidget.py" line="370" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
+      <location filename="../PipxWidget.py" line="371" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="388" />
+      <location filename="../PipxWidget.py" line="396" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="476" />
+      <location filename="../PipxWidget.py" line="484" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
+      <location filename="../PipxWidget.py" line="509" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="526" />
+      <location filename="../PipxWidget.py" line="534" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="527" />
+      <location filename="../PipxWidget.py" line="535" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="543" />
+      <location filename="../PipxWidget.py" line="551" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="664" />
+      <location filename="../PipxWidget.py" line="682" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="712" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="702" />
+      <location filename="../PipxWidget.py" line="720" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="723" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="719" />
+      <location filename="../PipxWidget.py" line="737" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="734" />
+      <location filename="../PipxWidget.py" line="752" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="761" />
+      <location filename="../PipxWidget.py" line="779" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="763" />
+      <location filename="../PipxWidget.py" line="781" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -865,6 +882,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to repair broken dependencies of the selected package.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_en.ts	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/i18n/pipx_en.ts	Fri Dec 13 15:40:08 2024 +0100
@@ -4,150 +4,167 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="273" />
-      <location filename="../Pipx.py" line="163" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="285" />
-      <location filename="../Pipx.py" line="277" />
-      <location filename="../Pipx.py" line="166" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="175" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
-      <location filename="../Pipx.py" line="177" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="236" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="237" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="257" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="263" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="284" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="409" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="454" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="504" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="535" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="558" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="595" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="609" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="622" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="633" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="672" />
-      <source>Check Outdated Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Pipx.py" line="673" />
-      <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <source>Check Outdated Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="734" />
-      <source>Get Package Dependencies</source>
+      <location filename="../Pipx.py" line="674" />
+      <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Pipx.py" line="735" />
+      <source>Get Package Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="818" />
-      <location filename="../Pipx.py" line="811" />
+      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="812" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="820" />
       <source>All dependencies are already up-to-date.</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="961" />
+      <location filename="../Pipx.py" line="955" />
+      <location filename="../Pipx.py" line="947" />
+      <source>Repair Broken Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="956" />
+      <source>There are no broken dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="962" />
+      <source>&lt;p&gt;The interpreter for package &lt;b&gt;{0}&lt;/b&gt; could not be determined. Aborting...&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -582,229 +599,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="137" />
+      <location filename="../PipxWidget.py" line="145" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="270" />
-      <location filename="../PipxWidget.py" line="139" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="147" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="289" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="297" />
+      <location filename="../PipxWidget.py" line="150" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="146" />
+      <location filename="../PipxWidget.py" line="154" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="387" />
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="395" />
+      <location filename="../PipxWidget.py" line="157" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="345" />
-      <location filename="../PipxWidget.py" line="336" />
-      <location filename="../PipxWidget.py" line="324" />
-      <location filename="../PipxWidget.py" line="308" />
-      <location filename="../PipxWidget.py" line="153" />
+      <location filename="../PipxWidget.py" line="353" />
+      <location filename="../PipxWidget.py" line="344" />
+      <location filename="../PipxWidget.py" line="332" />
+      <location filename="../PipxWidget.py" line="316" />
+      <location filename="../PipxWidget.py" line="161" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="160" />
+      <location filename="../PipxWidget.py" line="168" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="170" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="475" />
-      <location filename="../PipxWidget.py" line="166" />
+      <location filename="../PipxWidget.py" line="483" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="500" />
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="508" />
+      <location filename="../PipxWidget.py" line="177" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="188" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="182" />
+      <location filename="../PipxWidget.py" line="190" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="542" />
-      <location filename="../PipxWidget.py" line="185" />
+      <location filename="../PipxWidget.py" line="550" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="192" />
-      <source>Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipxWidget.py" line="194" />
-      <source>Show All Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipxWidget.py" line="197" />
-      <source>Show Outdated Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipxWidget.py" line="200" />
+      <source>Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="202" />
+      <source>Show All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="205" />
+      <source>Show Outdated Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="208" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="204" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="223" />
+      <location filename="../PipxWidget.py" line="231" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="227" />
+      <location filename="../PipxWidget.py" line="235" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="230" />
+      <location filename="../PipxWidget.py" line="238" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="310" />
+      <location filename="../PipxWidget.py" line="318" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="311" />
+      <location filename="../PipxWidget.py" line="319" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="325" />
+      <location filename="../PipxWidget.py" line="333" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="337" />
+      <location filename="../PipxWidget.py" line="345" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="346" />
+      <location filename="../PipxWidget.py" line="354" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="362" />
+      <location filename="../PipxWidget.py" line="370" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
+      <location filename="../PipxWidget.py" line="371" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="388" />
+      <location filename="../PipxWidget.py" line="396" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="476" />
+      <location filename="../PipxWidget.py" line="484" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
+      <location filename="../PipxWidget.py" line="509" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="526" />
+      <location filename="../PipxWidget.py" line="534" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="527" />
+      <location filename="../PipxWidget.py" line="535" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="543" />
+      <location filename="../PipxWidget.py" line="551" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="664" />
+      <location filename="../PipxWidget.py" line="682" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="712" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="702" />
+      <location filename="../PipxWidget.py" line="720" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="723" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="719" />
+      <location filename="../PipxWidget.py" line="737" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="734" />
+      <location filename="../PipxWidget.py" line="752" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="761" />
+      <location filename="../PipxWidget.py" line="779" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="763" />
+      <location filename="../PipxWidget.py" line="781" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -865,6 +882,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to repair broken dependencies of the selected package.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_es.ts	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/i18n/pipx_es.ts	Fri Dec 13 15:40:08 2024 +0100
@@ -4,150 +4,167 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="273" />
-      <location filename="../Pipx.py" line="163" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Mensaje: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="285" />
-      <location filename="../Pipx.py" line="277" />
-      <location filename="../Pipx.py" line="166" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;pipx ha terminado con un error ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="175" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation>pipx no ha terminado antes de 30 segundos.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
-      <location filename="../Pipx.py" line="177" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation>pipx no se ha podido iniciar.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation>Error de Inicio de pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="236" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation>Error Tiempo de Ejecución de pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="237" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El proceso de pipx ha reportado un error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="257" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation>pipx no ha terminado antes de {0} segundos.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="263" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation>Error de Tiempo Agotado de pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="284" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation>Error de Ejecución de pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="409" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="454" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation>Instalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="504" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation>Reinstalar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="535" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation>Reinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation>Desinstalar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="558" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation>Desinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation>Actualizar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation>Actualizar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="595" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation>Actualizar Bibliotecas Compartidas</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="609" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation>Actualizar Intérpretes</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="622" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation>Limpiar Intérpretes no Utililizados</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="633" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation>Asegurar modificaciones de PATH</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="672" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation>Comprobar Package Desactualizado</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="673" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El status del package &lt;b&gt;{0}&lt;/b&gt; no se ha podido determinar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="734" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation>Obtener Dependencias del PAckage</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="735" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El estado de las dependencias del package &lt;b&gt;{0}&lt;/b&gt; no se han podido determinar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="818" />
-      <location filename="../Pipx.py" line="811" />
+      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="812" />
       <source>Upgrade Dependencies</source>
       <translation>Actualizar Dependencias</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="820" />
       <source>All dependencies are already up-to-date.</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="961" />
+      <location filename="../Pipx.py" line="955" />
+      <location filename="../Pipx.py" line="947" />
+      <source>Repair Broken Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="956" />
+      <source>There are no broken dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="962" />
+      <source>&lt;p&gt;The interpreter for package &lt;b&gt;{0}&lt;/b&gt; could not be determined. Aborting...&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -586,229 +603,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="137" />
+      <location filename="../PipxWidget.py" line="145" />
       <source>Install</source>
       <translation>Instalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="270" />
-      <location filename="../PipxWidget.py" line="139" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="147" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="289" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="297" />
+      <location filename="../PipxWidget.py" line="150" />
       <source>Install All Packages</source>
       <translation>Instalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="146" />
+      <location filename="../PipxWidget.py" line="154" />
       <source>Re-Install Selected Package</source>
       <translation>Reinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="387" />
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="395" />
+      <location filename="../PipxWidget.py" line="157" />
       <source>Re-Install All Packages</source>
       <translation>Reinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="345" />
-      <location filename="../PipxWidget.py" line="336" />
-      <location filename="../PipxWidget.py" line="324" />
-      <location filename="../PipxWidget.py" line="308" />
-      <location filename="../PipxWidget.py" line="153" />
+      <location filename="../PipxWidget.py" line="353" />
+      <location filename="../PipxWidget.py" line="344" />
+      <location filename="../PipxWidget.py" line="332" />
+      <location filename="../PipxWidget.py" line="316" />
+      <location filename="../PipxWidget.py" line="161" />
       <source>Create Spec Metadata File</source>
       <translation>Crear Archivo de Metadatos de Spec</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="160" />
+      <location filename="../PipxWidget.py" line="168" />
       <source>Upgrade</source>
       <translation>Actualizar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="170" />
       <source>Check Outdated Packages</source>
       <translation>Comprobar Packages Desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="475" />
-      <location filename="../PipxWidget.py" line="166" />
+      <location filename="../PipxWidget.py" line="483" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Upgrade Selected Package</source>
       <translation>Actualizar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="500" />
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="508" />
+      <location filename="../PipxWidget.py" line="177" />
       <source>Upgrade All Packages</source>
       <translation>Actualizar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Upgrade Shared Libraries</source>
       <translation>Actualizar Bibliotecas Compartidas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="188" />
       <source>Uninstall</source>
       <translation>Desinstalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="182" />
+      <location filename="../PipxWidget.py" line="190" />
       <source>Uninstall Selected Package</source>
       <translation>Desinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="542" />
-      <location filename="../PipxWidget.py" line="185" />
+      <location filename="../PipxWidget.py" line="550" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Uninstall All Packages</source>
       <translation>Desinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="192" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Dependencies</source>
       <translation>Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="194" />
+      <location filename="../PipxWidget.py" line="202" />
       <source>Show All Dependencies</source>
       <translation>Mostrar Todas las Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="197" />
+      <location filename="../PipxWidget.py" line="205" />
       <source>Show Outdated Dependencies</source>
       <translation>Mostrar Dependencias Desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="200" />
+      <location filename="../PipxWidget.py" line="208" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Mostrar Dependencias Actualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="204" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="223" />
+      <location filename="../PipxWidget.py" line="231" />
       <source>Standalone Interpreters</source>
       <translation>Intérpretes Independientes</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="227" />
+      <location filename="../PipxWidget.py" line="235" />
       <source>Ensure PATH Modifications</source>
       <translation>Asegurar modificaciones de PATH</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="230" />
+      <location filename="../PipxWidget.py" line="238" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="310" />
+      <location filename="../PipxWidget.py" line="318" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>Archivos JSON (*.json);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="311" />
+      <location filename="../PipxWidget.py" line="319" />
       <source>JSON Files (*.json)</source>
       <translation>Archivos JSON (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="325" />
+      <location filename="../PipxWidget.py" line="333" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="337" />
+      <location filename="../PipxWidget.py" line="345" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de metadatos de spec &lt;b&gt;{0}&lt;/b&gt; se ha creado con éxito&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="346" />
+      <location filename="../PipxWidget.py" line="354" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de metadatos de spec &lt;b&gt;{0}&lt;/b&gt; no se ha podido crear.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="362" />
+      <location filename="../PipxWidget.py" line="370" />
       <source>Re-Install Package</source>
       <translation>Reinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
+      <location filename="../PipxWidget.py" line="371" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Debe ser el package &lt;b&gt;{0}&lt;/b&gt; reinstalado seguro?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="388" />
+      <location filename="../PipxWidget.py" line="396" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>¿Desea seguro reinstalar todos los packages?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="476" />
+      <location filename="../PipxWidget.py" line="484" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El package seleccionado no se puede actualizar porque algunas de sus apps están en ejecución.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Detener estasapps e intentar de nuevo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
+      <location filename="../PipxWidget.py" line="509" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Los packages no se pueden actualizar porque algunas de sus apps están en ejecución.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Detener estas apps e intentar de nuevo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="526" />
+      <location filename="../PipxWidget.py" line="534" />
       <source>Uninstall Package</source>
       <translation>Desinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="527" />
+      <location filename="../PipxWidget.py" line="535" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Debe ser el package &lt;b&gt;{0}&lt;/b&gt; desinstalado seguro?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="543" />
+      <location filename="../PipxWidget.py" line="551" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Desea seguro desinstalar &lt;b&gt;TODOS&lt;/b&gt; los packages?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="664" />
+      <location filename="../PipxWidget.py" line="682" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;pipx Versión {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="712" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="702" />
+      <location filename="../PipxWidget.py" line="720" />
       <source>package and some dependencies outdated</source>
       <translation>package y algunas dependencias desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="723" />
       <source>package outdated</source>
       <translation>package desactualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="719" />
+      <location filename="../PipxWidget.py" line="737" />
       <source>some dependencies outdated</source>
       <translation>algunas dependencias desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="734" />
+      <location filename="../PipxWidget.py" line="752" />
       <source>everything up-to-date</source>
       <translation>todo actualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="761" />
+      <location filename="../PipxWidget.py" line="779" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="763" />
+      <location filename="../PipxWidget.py" line="781" />
       <source> (standalone)</source>
       <translation> (independiente)</translation>
     </message>
@@ -869,6 +886,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to repair broken dependencies of the selected package.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Package/Aplicación</translation>
     </message>
--- a/PipxInterface/i18n/pipx_ru.ts	Tue Dec 10 17:53:34 2024 +0100
+++ b/PipxInterface/i18n/pipx_ru.ts	Fri Dec 13 15:40:08 2024 +0100
@@ -4,150 +4,167 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="273" />
-      <location filename="../Pipx.py" line="163" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Сообщение: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="285" />
-      <location filename="../Pipx.py" line="277" />
-      <location filename="../Pipx.py" line="166" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;pipx завершился с ошибкой ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="175" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation>pipx не была завершена в течение 30 секунд.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
-      <location filename="../Pipx.py" line="177" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation>pipx не удалось запустить.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="231" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation>Ошибка запуска pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="236" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation>Ошибка времени выполнения pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="237" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Процесс pipx сообщил об ошибке.&lt;/p&gt;&lt;p&gt;Ошибка: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="257" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation>pipx не завершился в течение {0} секунд.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="263" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation>Ошибка тайм-аута pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="284" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation>Ошибка выполнения pipx</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="409" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation>Установить пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="454" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation>Установить все пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="504" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation>Переустановить пакет</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="535" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation>Переустановить все пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation>Деинсталировать пакет</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="558" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation>Деинсталировать все пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation>Обновить пакет</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation>Обновить все пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="595" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation>Обновить общие библиотеки</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="609" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation>Обновить интерпретаторы</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="622" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation>Удалить неиспользуемые интерпретаторы</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="633" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation>Внести изменения в переменную PATH</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="672" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation>Проверить устаревшие пакеты</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="673" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось определить статус пакета &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="734" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation>Получение зависимостей пакетов</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="735" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось определить статус зависимостей пакета &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="818" />
-      <location filename="../Pipx.py" line="811" />
+      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="812" />
       <source>Upgrade Dependencies</source>
       <translation>Обновление зависимостей</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="819" />
+      <location filename="../Pipx.py" line="820" />
       <source>All dependencies are already up-to-date.</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="961" />
+      <location filename="../Pipx.py" line="955" />
+      <location filename="../Pipx.py" line="947" />
+      <source>Repair Broken Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="956" />
+      <source>There are no broken dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Pipx.py" line="962" />
+      <source>&lt;p&gt;The interpreter for package &lt;b&gt;{0}&lt;/b&gt; could not be determined. Aborting...&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -586,229 +603,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="137" />
+      <location filename="../PipxWidget.py" line="145" />
       <source>Install</source>
       <translation>Установить</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="270" />
-      <location filename="../PipxWidget.py" line="139" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="147" />
       <source>Install Packages</source>
       <translation>Установить пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="289" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="297" />
+      <location filename="../PipxWidget.py" line="150" />
       <source>Install All Packages</source>
       <translation>Установить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="146" />
+      <location filename="../PipxWidget.py" line="154" />
       <source>Re-Install Selected Package</source>
       <translation>Переустановить выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="387" />
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="395" />
+      <location filename="../PipxWidget.py" line="157" />
       <source>Re-Install All Packages</source>
       <translation>Переустановить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="345" />
-      <location filename="../PipxWidget.py" line="336" />
-      <location filename="../PipxWidget.py" line="324" />
-      <location filename="../PipxWidget.py" line="308" />
-      <location filename="../PipxWidget.py" line="153" />
+      <location filename="../PipxWidget.py" line="353" />
+      <location filename="../PipxWidget.py" line="344" />
+      <location filename="../PipxWidget.py" line="332" />
+      <location filename="../PipxWidget.py" line="316" />
+      <location filename="../PipxWidget.py" line="161" />
       <source>Create Spec Metadata File</source>
       <translation>Создать файл спецификации метаданных</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="160" />
+      <location filename="../PipxWidget.py" line="168" />
       <source>Upgrade</source>
       <translation>Обновить</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="170" />
       <source>Check Outdated Packages</source>
       <translation>Проверить устаревшие пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="475" />
-      <location filename="../PipxWidget.py" line="166" />
+      <location filename="../PipxWidget.py" line="483" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Upgrade Selected Package</source>
       <translation>Обновить выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="500" />
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="508" />
+      <location filename="../PipxWidget.py" line="177" />
       <source>Upgrade All Packages</source>
       <translation>Обновить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Upgrade Shared Libraries</source>
       <translation>Обновить общие библиотеки</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="188" />
       <source>Uninstall</source>
       <translation>Деинсталировать</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="182" />
+      <location filename="../PipxWidget.py" line="190" />
       <source>Uninstall Selected Package</source>
       <translation>Деинсталировать выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="542" />
-      <location filename="../PipxWidget.py" line="185" />
+      <location filename="../PipxWidget.py" line="550" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Uninstall All Packages</source>
       <translation>Деинсталировать все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="192" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Dependencies</source>
       <translation>Зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="194" />
+      <location filename="../PipxWidget.py" line="202" />
       <source>Show All Dependencies</source>
       <translation>Показать все зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="197" />
+      <location filename="../PipxWidget.py" line="205" />
       <source>Show Outdated Dependencies</source>
       <translation>Показать устаревшие зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="200" />
+      <location filename="../PipxWidget.py" line="208" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Показать актуальные зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="204" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="223" />
+      <location filename="../PipxWidget.py" line="231" />
       <source>Standalone Interpreters</source>
       <translation>Автономные интерпретаторы</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="227" />
+      <location filename="../PipxWidget.py" line="235" />
       <source>Ensure PATH Modifications</source>
       <translation>Внести изменения в переменную PATH</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="230" />
+      <location filename="../PipxWidget.py" line="238" />
       <source>Configure...</source>
       <translation>Настройка...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="310" />
+      <location filename="../PipxWidget.py" line="318" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="311" />
+      <location filename="../PipxWidget.py" line="319" />
       <source>JSON Files (*.json)</source>
       <translation>Файлы JSON (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="325" />
+      <location filename="../PipxWidget.py" line="333" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Перезаписать?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="337" />
+      <location filename="../PipxWidget.py" line="345" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл спецификации метаданных  &lt;b&gt;{0}&lt;/b&gt; был успешно создан.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="346" />
+      <location filename="../PipxWidget.py" line="354" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось создать файл спецификации метаданных &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="362" />
+      <location filename="../PipxWidget.py" line="370" />
       <source>Re-Install Package</source>
       <translation>Переустановить пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
+      <location filename="../PipxWidget.py" line="371" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Действительно ли пакет &lt;b&gt;{0}&lt;/b&gt; должен быть переустановлен?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="388" />
+      <location filename="../PipxWidget.py" line="396" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>Вы действительно хотите переустановить все пакеты?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="476" />
+      <location filename="../PipxWidget.py" line="484" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Выбранный пакет не может быть обновлен, поскольку некоторые из его приложений запущены.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Остановите эти приложения и повторите попытку.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
+      <location filename="../PipxWidget.py" line="509" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Обновление пакетов невозможно, поскольку некоторые из их приложений запущены.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Остановите эти приложения и повторите попытку.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="526" />
+      <location filename="../PipxWidget.py" line="534" />
       <source>Uninstall Package</source>
       <translation>Деинсталировать пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="527" />
+      <location filename="../PipxWidget.py" line="535" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Действительно ли пакет &lt;b&gt;{0}&lt;/b&gt; должен быть удален?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="543" />
+      <location filename="../PipxWidget.py" line="551" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Вы действительно хотите удалить &lt;/b&gt;ВСЕ &lt;/b&gt; пакеты?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="664" />
+      <location filename="../PipxWidget.py" line="682" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;Версия pipx {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="712" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="702" />
+      <location filename="../PipxWidget.py" line="720" />
       <source>package and some dependencies outdated</source>
       <translation>пакет и некоторые зависимости устарели</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="723" />
       <source>package outdated</source>
       <translation>пакет устарел</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="719" />
+      <location filename="../PipxWidget.py" line="737" />
       <source>some dependencies outdated</source>
       <translation>некоторые зависимости устарели</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="734" />
+      <location filename="../PipxWidget.py" line="752" />
       <source>everything up-to-date</source>
       <translation>все обновлено</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="761" />
+      <location filename="../PipxWidget.py" line="779" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="763" />
+      <location filename="../PipxWidget.py" line="781" />
       <source> (standalone)</source>
       <translation> (автономный)</translation>
     </message>
@@ -869,6 +886,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to repair broken dependencies of the selected package.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Пакет/Приложение</translation>
     </message>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PipxInterface/icons/repair-dark.svg	Fri Dec 13 15:40:08 2024 +0100
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   fill="none"
+   version="1.1"
+   viewBox="0 0 22 22"
+   id="svg4"
+   sodipodi:docname="repair-dark.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     id="namedview6"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="46.681818"
+     inkscape:cx="11.032132"
+     inkscape:cy="11.257059"
+     inkscape:window-width="2580"
+     inkscape:window-height="1316"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg4" />
+  <path
+     d="m 17.497184,20.42414 c -0.197666,0.191361 -0.432229,0.340877 -0.689612,0.439481 -0.257401,0.09861 -0.532271,0.144281 -0.808032,0.13433 -0.494508,0.02252 -0.979669,-0.141214 -1.358945,-0.458664 -0.395087,-0.325064 -0.65092,-0.787734 -0.715338,-1.293634 -0.05631,-2.040015 -0.05978,-5.956471 -0.03232,-8.775392 C 12.764885,9.9527806 11.871011,9.0345438 11.386835,7.8958138 10.980776,6.9515499 10.891575,5.9024766 11.132586,4.9047433 11.296692,4.0972268 11.660555,3.3435251 12.191224,2.7118767 12.721899,2.0802341 13.402547,1.5906535 14.171797,1.2872447 L 14.902559,1 l 0.07481,4.7871631 2.077294,0.00489 0.05099,-4.7901561 0.732872,0.2900823 c 0.61783,0.244613 1.180989,0.6087871 1.656807,1.0714971 0.475801,0.4626582 0.854759,1.0146203 1.114853,1.6238448 0.256729,0.602905 0.389317,1.2507841 0.389814,1.9051614 -0.0037,0.3668447 -0.04811,0.7320606 -0.132559,1.0890171 -0.151688,0.7614833 -0.482756,1.475926 -0.965974,2.084598 -0.483316,0.6087587 -1.104984,1.0943703 -1.813947,1.4169373 0.01462,1.819978 0.03405,6.345952 -0.04527,8.701144 -0.0221,0.466289 -0.216153,0.90775 -0.54507,1.239837 z M 13.25796,3.1510078 c -0.544619,0.539507 -0.915657,1.2281875 -1.066038,1.978643 -0.06848,0.2829051 -0.105007,0.5725902 -0.108932,0.8636797 0.0039,0.7884079 0.249798,1.5571777 0.704764,2.2033015 0.454961,0.6460833 1.097233,1.1385786 1.840655,1.4114117 L 14.986,9.7412392 14.98173,10.12005 c -0.03203,2.826575 -0.03446,6.985918 0.02335,9.044235 0.04398,0.22193 0.167037,0.420654 0.346474,0.559451 0.179506,0.138888 0.403278,0.208508 0.629964,0.195984 0.145884,0.008 0.291855,-0.01398 0.428726,-0.06458 0.120199,-0.04504 0.229951,-0.113795 0.322784,-0.202097 0.134374,-0.14069 0.213146,-0.325053 0.22206,-0.519086 0.08446,-2.502708 0.05469,-7.530398 0.04492,-9.006767 l -0.0019,-0.3788221 0.35506,-0.1318142 C 17.975622,9.391391 18.528634,9.0097141 18.958604,8.5084934 19.388567,8.00729 19.680793,7.4036713 19.806969,6.7562008 19.87452,6.4717072 19.909512,6.1804451 19.911247,5.88798 19.911524,5.378805 19.809419,4.8745799 19.611038,4.4049344 19.412576,3.935358 19.121807,3.5098637 18.755951,3.1535115 18.57753,2.9758763 18.381872,2.8162678 18.171702,2.6772413 L 18.124002,6.8678364 13.90952,6.8671458 13.84443,2.6665934 C 13.633285,2.808283 13.436856,2.9705553 13.25805,3.151029 Z"
+     fill="#eff0f1"
+     stroke-width="1.16638"
+     id="path2" />
+  <path
+     style="color:#232629;fill:#eff0f1;fill-opacity:1;stroke:none;stroke-width:1.195;stroke-dasharray:none"
+     d="m 5,1 -4,8.75 1.0223214,0.559083 2.40625,-5.2636729 V 9.75 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.75 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path6178" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PipxInterface/icons/repair-light.svg	Fri Dec 13 15:40:08 2024 +0100
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   fill="none"
+   version="1.1"
+   viewBox="0 0 22 22"
+   id="svg4"
+   sodipodi:docname="repair-light.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     id="namedview6"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="46.681818"
+     inkscape:cx="11.439143"
+     inkscape:cy="11.278481"
+     inkscape:window-width="2580"
+     inkscape:window-height="1310"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg4" />
+  <path
+     d="m 17.497183,20.424139 c -0.197666,0.191361 -0.432229,0.340877 -0.689612,0.439481 -0.257401,0.09861 -0.532271,0.144282 -0.808032,0.13433 -0.494509,0.02252 -0.979669,-0.141214 -1.358944,-0.458664 -0.395087,-0.325064 -0.65092,-0.787734 -0.715338,-1.293634 -0.05631,-2.040014 -0.05977,-5.956471 -0.03231,-8.775391 C 12.764884,9.9527803 11.871011,9.0345434 11.386835,7.8958135 10.980775,6.9515496 10.891575,5.9024764 11.132586,4.9047431 11.296692,4.0972266 11.660555,3.343525 12.191223,2.7118767 12.721899,2.080234 13.402547,1.5906535 14.171796,1.2872447 L 14.902558,1 l 0.07481,4.7871629 2.077294,0.00489 0.05099,-4.7901559 0.732872,0.2900822 c 0.61783,0.244613 1.180988,0.6087871 1.656806,1.0714971 0.475802,0.4626582 0.854759,1.0146203 1.114853,1.6238448 0.256729,0.6029049 0.389317,1.250784 0.389814,1.9051613 -0.0037,0.3668447 -0.04811,0.7320606 -0.132559,1.0890171 -0.151688,0.7614832 -0.482756,1.4759259 -0.965974,2.0845978 -0.483316,0.6087587 -1.104984,1.0943697 -1.813946,1.4169377 0.01462,1.819978 0.03405,6.345951 -0.04527,8.701143 -0.0221,0.466289 -0.216153,0.90775 -0.54507,1.239838 z M 13.257959,3.1510077 c -0.544618,0.539507 -0.915655,1.2281874 -1.066038,1.9786429 -0.06848,0.2829051 -0.105006,0.5725902 -0.108932,0.8636797 0.0038,0.7884079 0.249799,1.5571776 0.704765,2.2033014 0.454961,0.6460833 1.097232,1.1385785 1.840655,1.4114116 l 0.35759,0.1331955 -0.0043,0.3788122 c -0.03203,2.826573 -0.03445,6.985916 0.02335,9.044234 0.04397,0.221929 0.167036,0.420654 0.346473,0.559451 0.179508,0.138887 0.40328,0.208508 0.629965,0.195983 0.145884,0.008 0.291855,-0.01398 0.428726,-0.06459 0.120198,-0.04504 0.229951,-0.113795 0.322783,-0.202097 0.134374,-0.14069 0.213147,-0.325052 0.222061,-0.519085 0.08446,-2.502708 0.05469,-7.530399 0.04492,-9.006767 l -0.0019,-0.3788175 0.355059,-0.1318142 C 17.975648,9.3913857 18.528659,9.0097088 18.958629,8.5084881 19.388592,8.0072847 19.680818,7.403666 19.806994,6.7561956 19.874544,6.4717019 19.909538,6.1804399 19.911272,5.8879748 19.91155,5.3787998 19.809445,4.8745748 19.611063,4.4049292 19.412575,3.9353579 19.121806,3.5098635 18.755949,3.1535114 18.577528,2.9758762 18.38187,2.8162677 18.171701,2.6772412 l -0.0477,4.1905949 -4.214481,-6.906e-4 -0.0651,-4.2005521 c -0.211144,0.1416895 -0.407573,0.3039618 -0.586379,0.4844355 z"
+     fill="#232629"
+     stroke-width="1.16638"
+     id="path2" />
+  <path
+     style="color:#232629;fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.19522"
+     d="M 5,1 1,9.7499998 2.0223214,10.309083 4.4285714,5.0454101 V 9.7499998 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.7499998 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path6178" />
+</svg>
--- a/PluginPipxInterface.epj	Tue Dec 10 17:53:34 2024 +0100
+++ b/PluginPipxInterface.epj	Fri Dec 13 15:40:08 2024 +0100
@@ -234,11 +234,15 @@
       "PKGLIST",
       "PipxInterface/Documentation/LICENSE.GPL",
       "PipxInterface/Documentation/Source",
+      "PipxInterface/icons/dependency-dark.svg",
+      "PipxInterface/icons/dependency-light.svg",
       "PipxInterface/icons/pipx22.svg",
       "PipxInterface/icons/pipx48.svg",
       "PipxInterface/icons/pipx96.svg",
       "PipxInterface/icons/pipxOutdated22.svg",
       "PipxInterface/icons/pipxOutdated96.svg",
+      "PipxInterface/icons/repair-dark.svg",
+      "PipxInterface/icons/repair-light.svg",
       "PluginPipxInterface.epj",
       "PluginPipxInterface.zip",
       "changelog.md",
--- a/PluginPipxInterface.py	Tue Dec 10 17:53:34 2024 +0100
+++ b/PluginPipxInterface.py	Fri Dec 13 15:40:08 2024 +0100
@@ -36,7 +36,7 @@
     "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
     "autoactivate": True,
     "deactivateable": True,
-    "version": "10.6.0",
+    "version": "10.6.1",
     "className": "PluginPipxInterface",
     "packageName": "PipxInterface",
     "shortDescription": "Graphical interface to the 'pipx' command.",
Binary file PluginPipxInterface.zip has changed
--- a/changelog.md	Tue Dec 10 17:53:34 2024 +0100
+++ b/changelog.md	Fri Dec 13 15:40:08 2024 +0100
@@ -1,6 +1,10 @@
 ChangeLog
 ---------
 
+__Version 10.6.1__
+
+- Added a shortcut button to repair broken dependencies of the selected package.
+
 __Version 10.6.0__
 
 - Added a shortcut button to show the outdated dependencies of the selected package.

eric ide

mercurial