pip Interface eric7

Sun, 17 Jul 2022 18:47:23 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 17 Jul 2022 18:47:23 +0200
branch
eric7
changeset 9243
73c7abe824f3
parent 9242
e406ed611e03
child 9244
3bf1a02df07a

pip Interface
- added capability to generate text for a 'constraints.txt' file

docs/changelog file | annotate | diff | comparison | revisions
src/eric7/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
src/eric7/PipInterface/PipFreezeDialog.ui file | annotate | diff | comparison | revisions
src/eric7/PipInterface/PipPackagesWidget.py file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/changelog	Sun Jul 17 17:46:51 2022 +0200
+++ b/docs/changelog	Sun Jul 17 18:47:23 2022 +0200
@@ -17,6 +17,7 @@
 - pip Interface
   -- included a copy of pipdeptree and patched it to work with Python 3.11+
   -- added capability to repair dependency issues
+  -- added capability to generate text for a 'constraints.txt' file
 - setup Wizard
   -- added support for 'project_urls'
   -- added support for 'entry_points'
--- a/src/eric7/PipInterface/PipFreezeDialog.py	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/PipInterface/PipFreezeDialog.py	Sun Jul 17 18:47:23 2022 +0200
@@ -7,6 +7,7 @@
 Module implementing a dialog to generate a requirements file.
 """
 
+import enum
 import os
 
 from PyQt6.QtCore import pyqtSlot, Qt
@@ -22,24 +23,45 @@
 import Utilities
 
 
+class PipFreezeDialogModes(enum.Enum):
+    """
+    Class defining the various dialog modes.
+    """
+
+    Constraints = 1
+    Requirements = 2
+
+
 class PipFreezeDialog(QDialog, Ui_PipFreezeDialog):
     """
     Class implementing a dialog to generate a requirements file.
     """
 
-    def __init__(self, pip, parent=None):
+    def __init__(self, pip, mode=PipFreezeDialogModes.Requirements, parent=None):
         """
         Constructor
 
         @param pip reference to the master object
         @type Pip
-        @param parent reference to the parent widget
-        @type QWidget
+        @param mode dialog mod (defaults to PipFreezeDialogModes.Requirements)
+        @type PipFreezeDialogModes (optional)
+        @param parent reference to the parent widget (defaults to None
+        @type QWidget (optional)
         """
         super().__init__(parent)
         self.setupUi(self)
         self.setWindowFlags(Qt.WindowType.Window)
 
+        self.__dialogMode = mode
+        if mode is PipFreezeDialogModes.Constraints:
+            self.constraintsCheckBox.setChecked(False)
+            self.constraintsCheckBox.setEnabled(False)
+
+            self.setWindowTitle(self.tr("Generate Constraints"))
+
+        elif mode is PipFreezeDialogModes.Requirements:
+            self.setWindowTitle(self.tr("Generate Requirements"))
+
         self.__refreshButton = self.buttonBox.addButton(
             self.tr("&Refresh"), QDialogButtonBox.ButtonRole.ActionRole
         )
@@ -141,11 +163,16 @@
         self.__requirementsAvailable = False
         self.__environmentName = venvName
 
-        fileName = (
-            Utilities.toNativeSeparators(self.requirementsFilePicker.text())
-            if self.requirementsFilePicker.text()
-            else ""
-        )
+        if not bool(self.requirementsFilePicker.text()):
+            self.requirementsFilePicker.setText(
+                "constraints.txt"
+                if self.__dialogMode is PipFreezeDialogModes.Constraints
+                else "requirements.txt"
+            )
+
+        fileName = Utilities.toNativeSeparators(self.requirementsFilePicker.text())
+        if fileName and not os.path.isabs(fileName):
+            fileName = ""
 
         with EricOverrideCursor():
             specifiers = self.__pip.getFrozenPackages(
@@ -172,7 +199,9 @@
         Private method to set the state of the various buttons.
         """
         self.saveButton.setEnabled(
-            self.__requirementsAvailable and bool(self.requirementsFilePicker.text())
+            self.__requirementsAvailable
+            and bool(self.requirementsFilePicker.text())
+            and os.path.isabs(self.requirementsFilePicker.text())
         )
         self.saveToButton.setEnabled(self.__requirementsAvailable)
         self.copyButton.setEnabled(self.__requirementsAvailable)
@@ -206,9 +235,12 @@
             if not ok:
                 return
 
+        txt = self.requirementsEdit.toPlainText()
+        if self.constraintsCheckBox.isChecked():
+            txt = f"--constraint constraints.txt\n{txt}"
         try:
             with open(fileName, "w") as f:
-                f.write(self.requirementsEdit.toPlainText())
+                f.write(txt)
         except OSError as err:
             EricMessageBox.critical(
                 self,
@@ -254,6 +286,8 @@
         Private slot to copy the requirements text to the clipboard.
         """
         txt = self.requirementsEdit.toPlainText()
+        if self.constraintsCheckBox.isChecked():
+            txt = f"--constraint constraints.txt\n{txt}"
         cb = QApplication.clipboard()
         cb.setText(txt)
 
--- a/src/eric7/PipInterface/PipFreezeDialog.ui	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/PipInterface/PipFreezeDialog.ui	Sun Jul 17 18:47:23 2022 +0200
@@ -46,6 +46,16 @@
       </widget>
      </item>
      <item>
+      <widget class="QCheckBox" name="constraintsCheckBox">
+       <property name="toolTip">
+        <string>Select to include an '--constraint constraints.txt' statement</string>
+       </property>
+       <property name="text">
+        <string>Include Constraints</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -188,6 +198,7 @@
  <tabstops>
   <tabstop>localCheckBox</tabstop>
   <tabstop>userCheckBox</tabstop>
+  <tabstop>constraintsCheckBox</tabstop>
   <tabstop>requirementsFilePicker</tabstop>
   <tabstop>requirementsEdit</tabstop>
   <tabstop>saveButton</tabstop>
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Sun Jul 17 18:47:23 2022 +0200
@@ -1145,36 +1145,85 @@
         Private method to create the super menu and attach it to the super
         menu button.
         """
-        self.__pipMenu = QMenu()
-        self.__installPipAct = self.__pipMenu.addAction(
+        ###################################################################
+        ## Menu with pip related actions
+        ###################################################################
+
+        self.__pipSubmenu = QMenu(self.tr("Pip"))
+        self.__installPipAct = self.__pipSubmenu.addAction(
             self.tr("Install Pip"), self.__installPip
         )
-        self.__installPipUserAct = self.__pipMenu.addAction(
+        self.__installPipUserAct = self.__pipSubmenu.addAction(
             self.tr("Install Pip to User-Site"), self.__installPipUser
         )
-        self.__repairPipAct = self.__pipMenu.addAction(
+        self.__repairPipAct = self.__pipSubmenu.addAction(
             self.tr("Repair Pip"), self.__repairPip
         )
-        self.__pipMenu.addSeparator()
-        self.__installPackagesAct = self.__pipMenu.addAction(
+
+        ###################################################################
+        ## Menu with install related actions
+        ###################################################################
+
+        self.__installSubmenu = QMenu(self.tr("Install"))
+        self.__installPackagesAct = self.__installSubmenu.addAction(
             self.tr("Install Packages"), self.__installPackages
         )
-        self.__installLocalPackageAct = self.__pipMenu.addAction(
+        self.__installLocalPackageAct = self.__installSubmenu.addAction(
             self.tr("Install Local Package"), self.__installLocalPackage
         )
-        self.__pipMenu.addSeparator()
-        self.__installRequirementsAct = self.__pipMenu.addAction(
+        self.__reinstallPackagesAct = self.__installSubmenu.addAction(
+            self.tr("Re-Install Selected Packages"), self.__reinstallPackages
+        )
+
+        ###################################################################
+        ## Menu for requirements and constraints management
+        ###################################################################
+
+        self.__requirementsSubenu = QMenu(self.tr("Requirements/Constraints"))
+        self.__installRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Install Requirements"), self.__installRequirements
         )
-        self.__reinstallPackagesAct = self.__pipMenu.addAction(
-            self.tr("Re-Install Selected Packages"), self.__reinstallPackages
-        )
-        self.__uninstallRequirementsAct = self.__pipMenu.addAction(
+        self.__uninstallRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Uninstall Requirements"), self.__uninstallRequirements
         )
-        self.__generateRequirementsAct = self.__pipMenu.addAction(
+        self.__generateRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Generate Requirements..."), self.__generateRequirements
         )
+        self.__requirementsSubenu.addSeparator()
+        self.__generateConstraintsAct = self.__requirementsSubenu.addAction(
+            self.tr("Generate Constraints..."), self.__generateConstraints
+        )
+
+        ###################################################################
+        ## Menu for requirements and constraints management
+        ###################################################################
+
+        self.__cacheSubmenu = QMenu(self.tr("Cache"))
+        self.__cacheInfoAct = self.__cacheSubmenu.addAction(
+            self.tr("Show Cache Info..."), self.__showCacheInfo
+        )
+        self.__cacheShowListAct = self.__cacheSubmenu.addAction(
+            self.tr("Show Cached Files..."), self.__showCacheList
+        )
+        self.__cacheRemoveAct = self.__cacheSubmenu.addAction(
+            self.tr("Remove Cached Files..."), self.__removeCachedFiles
+        )
+        self.__cachePurgeAct = self.__cacheSubmenu.addAction(
+            self.tr("Purge Cache..."), self.__purgeCache
+        )
+
+        ###################################################################
+        ## Main menu
+        ###################################################################
+
+        self.__pipMenu = QMenu()
+        self.__pipSubmenuAct = self.__pipMenu.addMenu(self.__pipSubmenu)
+        self.__pipMenu.addSeparator()
+        self.__installSubmenuAct = self.__pipMenu.addMenu(self.__installSubmenu)
+        self.__pipMenu.addSeparator()
+        self.__requirementsSubmenuAct = self.__pipMenu.addMenu(
+            self.__requirementsSubenu
+        )
         self.__pipMenu.addSeparator()
         self.__showLicensesDialogAct = self.__pipMenu.addAction(
             self.tr("Show Licenses..."), self.__showLicensesDialog
@@ -1192,18 +1241,7 @@
             self.tr("Create SBOM file"), self.__createSBOMFile
         )
         self.__pipMenu.addSeparator()
-        self.__cacheInfoAct = self.__pipMenu.addAction(
-            self.tr("Show Cache Info..."), self.__showCacheInfo
-        )
-        self.__cacheShowListAct = self.__pipMenu.addAction(
-            self.tr("Show Cached Files..."), self.__showCacheList
-        )
-        self.__cacheRemoveAct = self.__pipMenu.addAction(
-            self.tr("Remove Cached Files..."), self.__removeCachedFiles
-        )
-        self.__cachePurgeAct = self.__pipMenu.addAction(
-            self.tr("Purge Cache..."), self.__purgeCache
-        )
+        self.__cacheSubmenuAct = self.__pipMenu.addMenu(self.__cacheSubmenu)
         self.__pipMenu.addSeparator()
         # editUserConfigAct
         self.__pipMenu.addAction(
@@ -1229,22 +1267,16 @@
         enablePip = self.__isPipAvailable()
         enablePipCache = self.__availablePipVersion() >= (20, 1, 0)
 
+        self.__pipSubmenuAct.setEnabled(enable)
         self.__installPipAct.setEnabled(not enablePip)
         self.__installPipUserAct.setEnabled(not enablePip)
         self.__repairPipAct.setEnabled(enablePip)
 
-        self.__installPackagesAct.setEnabled(enablePip)
-        self.__installLocalPackageAct.setEnabled(enablePip)
-        self.__reinstallPackagesAct.setEnabled(enablePip)
+        self.__installSubmenu.setEnabled(enablePip)
 
-        self.__installRequirementsAct.setEnabled(enablePip)
-        self.__uninstallRequirementsAct.setEnabled(enablePip)
-        self.__generateRequirementsAct.setEnabled(enablePip)
+        self.__requirementsSubmenuAct.setEnabled(enablePip)
 
-        self.__cacheInfoAct.setEnabled(enablePipCache)
-        self.__cacheShowListAct.setEnabled(enablePipCache)
-        self.__cacheRemoveAct.setEnabled(enablePipCache)
-        self.__cachePurgeAct.setEnabled(enablePipCache)
+        self.__cacheSubmenuAct.setEnabled(enablePipCache)
 
         self.__editVirtualenvConfigAct.setEnabled(enable)
 
@@ -1358,9 +1390,26 @@
         """
         venvName = self.environmentsComboBox.currentText()
         if venvName:
-            from .PipFreezeDialog import PipFreezeDialog
+            from .PipFreezeDialog import PipFreezeDialog, PipFreezeDialogModes
+
+            self.__freezeDialog = PipFreezeDialog(
+                self.__pip, mode=PipFreezeDialogModes.Requirements, parent=self
+            )
+            self.__freezeDialog.show()
+            self.__freezeDialog.start(venvName)
 
-            self.__freezeDialog = PipFreezeDialog(self.__pip, self)
+    @pyqtSlot()
+    def __generateConstraints(self):
+        """
+        Private slot to generate the contents for a constraints file.
+        """
+        venvName = self.environmentsComboBox.currentText()
+        if venvName:
+            from .PipFreezeDialog import PipFreezeDialog, PipFreezeDialogModes
+
+            self.__freezeDialog = PipFreezeDialog(
+                self.__pip, mode=PipFreezeDialogModes.Constraints, parent=self
+            )
             self.__freezeDialog.show()
             self.__freezeDialog.start(venvName)
 
--- a/src/eric7/i18n/eric7_cs.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_cs.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31208,144 +31208,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
@@ -52253,42 +52253,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52319,6 +52325,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -53071,144 +53087,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Instalovat</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished">Konfigurovat...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">neznámý</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_de.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31284,144 +31284,144 @@
         <translation>Änderungssätze kopieren</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638"/>
         <source>Copy Changesets (Continue)</source>
         <translation>Änderungssätze kopieren (Fortsetzung)</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648"/>
         <source>Copy Changesets (Stop)</source>
         <translation>Änderungssätze kopieren (Stopp)</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658"/>
         <source>Copy Changesets (Abort)</source>
         <translation>Änderungssätze kopieren (Abbruch)</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681"/>
         <source>Create Unversioned Archive</source>
         <translation>Erzeuge nicht versioniertes Archiv</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695"/>
         <source>Delete All Backups</source>
         <translation>Alle Backups löschen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696"/>
         <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sollen wirklich alle Backupdateien des Backupbereiches gelöscht werden?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754"/>
         <source>Add Sub-repository</source>
         <translation>Unterrepository hinzufügen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755"/>
         <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Unterrepositorydatei .hgsub konnte nicht gelesen werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766"/>
         <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Unterrepositorydatei .hgsub enthält bereits einen Eintrag &lt;b&gt;{0}&lt;/b&gt;. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786"/>
         <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Unterrepositorydatei .hgsub konnte nicht gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807"/>
         <source>Remove Sub-repositories</source>
         <translation>Unterrepositorys löschen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808"/>
         <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Unterrepositorydatei .hgsub existiert nicht. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064"/>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921"/>
         <source>Mercurial Command Server</source>
         <translation>Mercurial-Befehlsserver</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922"/>
         <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Mercurial-Befehlsserver konnte nicht wiedergestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059"/>
         <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Mercurial-Befehlsserver konnte nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175"/>
         <source>Mercurial Bookmark</source>
         <translation>Mercurial-Lesezeichen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191"/>
         <source>Delete Bookmark</source>
         <translation>Lesezeichen löschen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192"/>
         <source>Select the bookmark to be deleted:</source>
         <translation>Wähle das zu löschende Lesezeichen aus:</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202"/>
         <source>Delete Mercurial Bookmark</source>
         <translation>Mercurial-Lesezeichen löschen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227"/>
         <source>Rename Mercurial Bookmark</source>
         <translation>Mercurial-Lesezeichen umbenennen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264"/>
         <source>Move Mercurial Bookmark</source>
         <translation>Mercurial-Lesezeichen verschieben</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337"/>
         <source>Pull Bookmark</source>
         <translation>Lesezeichen herunterladen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338"/>
         <source>Select the bookmark to be pulled:</source>
         <translation>Wähle das herunterzuladende Lesezeichen:</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350"/>
         <source>Pulling bookmark from a remote Mercurial repository</source>
         <translation>Lade Lesezeichen von einem entfernten Mercurial-Repository herunter</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376"/>
         <source>Push Bookmark</source>
         <translation>Lesezeichen hochladen</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377"/>
         <source>Select the bookmark to be push:</source>
         <translation>Wähle das hochzuladende Lesezeichen:</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392"/>
         <source>Pushing bookmark to a remote Mercurial repository</source>
         <translation>Lade Lesezeichen zu einem entfernten Mercurial-Repository hoch</translation>
     </message>
@@ -52355,42 +52355,48 @@
 <context>
     <name>PipFreezeDialog</name>
     <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="44"/>
-        <source>&amp;Refresh</source>
-        <translation>&amp;Aktualisieren</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="239"/>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="51"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation>Text Dateien (*.txt);;Alle Dateien (*)</translation>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="60"/>
+        <source>Generate Constraints</source>
+        <translation>Constraints generieren</translation>
     </message>
     <message>
         <location filename="../PipInterface/PipFreezeDialog.ui" line="0"/>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="237"/>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="215"/>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="200"/>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="121"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="269"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="247"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="229"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="143"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="63"/>
         <source>Generate Requirements</source>
         <translation>Anforderungen erzeugen</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="122"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="66"/>
+        <source>&amp;Refresh</source>
+        <translation>&amp;Aktualisieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="271"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="73"/>
+        <source>Text Files (*.txt);;All Files (*)</source>
+        <translation>Text Dateien (*.txt);;Alle Dateien (*)</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="144"/>
         <source>The requirements were changed. Do you want to overwrite these changes?</source>
         <translation>Die Anforderungen wurden verändert. Sollen die Änderungen überschrieben werden?</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="163"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="190"/>
         <source>No package specifiers generated by &apos;pip freeze&apos;.</source>
         <translation>&apos;pip freeze&apos; erzeugte keine Paketspezifikationen.</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="201"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="230"/>
         <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
         <translation>Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Soll sie überschrieben werden?</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipFreezeDialog.py" line="216"/>
+        <location filename="../PipInterface/PipFreezeDialog.py" line="248"/>
         <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Anforderungen konnten nicht in &lt;b&gt;{0}&lt;/b&gt; gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
@@ -52421,6 +52427,16 @@
     </message>
     <message>
         <location filename="../PipInterface/PipFreezeDialog.ui" line="0"/>
+        <source>Select to include an &apos;--constraint constraints.txt&apos; statement</source>
+        <translation>Auswählen, um eine &apos;--constraint constraints.txt&apos; Zeile einzufügen</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipFreezeDialog.ui" line="0"/>
+        <source>Include Constraints</source>
+        <translation>Constraints inkludieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipFreezeDialog.ui" line="0"/>
         <source>Requirements File:</source>
         <translation>Anforderungsdatei:</translation>
     </message>
@@ -53172,144 +53188,169 @@
         <translation>&lt;p&gt;Keine detaillierten Paketinformationen für &lt;b&gt;{0}&lt;/b&gt; verfügbar.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1150"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1152"/>
+        <source>Pip</source>
+        <translation>Pip</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1154"/>
         <source>Install Pip</source>
         <translation>Pip installieren</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1153"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1157"/>
         <source>Install Pip to User-Site</source>
         <translation>Pip in Nutzerverzeichnis installieren</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1156"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1160"/>
         <source>Repair Pip</source>
         <translation>Pip reparieren</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1300"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1160"/>
-        <source>Install Packages</source>
-        <translation>Pakete installieren</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1163"/>
-        <source>Install Local Package</source>
-        <translation>Lokales Paket installieren</translation>
-    </message>
-    <message>
         <location filename="../PipInterface/PipPackagesWidget.py" line="1167"/>
-        <source>Install Requirements</source>
-        <translation>Paketanforderungen installieren</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1170"/>
+        <source>Install</source>
+        <translation>Installieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1332"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1169"/>
+        <source>Install Packages</source>
+        <translation>Pakete installieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1172"/>
+        <source>Install Local Package</source>
+        <translation>Lokales Paket installieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1175"/>
         <source>Re-Install Selected Packages</source>
         <translation>Ausgewählte Pakete neu installieren</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1173"/>
-        <source>Uninstall Requirements</source>
-        <translation>Paketanforderungen deinstallieren</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1176"/>
-        <source>Generate Requirements...</source>
-        <translation>Anforderungen erzeugen...</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1180"/>
-        <source>Show Licenses...</source>
-        <translation>Lizenzen anzeigen...</translation>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1182"/>
+        <source>Requirements/Constraints</source>
+        <translation>Anforderungen/Constraints</translation>
     </message>
     <message>
         <location filename="../PipInterface/PipPackagesWidget.py" line="1184"/>
-        <source>Check Vulnerabilities</source>
-        <translation>Verwundbarkeiten prüfen</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1188"/>
-        <source>Update Vulnerability Database</source>
-        <translation>Verwundbarkeitsdatenbank aktualisieren</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1192"/>
-        <source>Create SBOM file</source>
-        <translation>STL Datei erzeugen</translation>
-    </message>
-    <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1196"/>
+        <source>Install Requirements</source>
+        <translation>Paketanforderungen installieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1187"/>
+        <source>Uninstall Requirements</source>
+        <translation>Paketanforderungen deinstallieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1190"/>
+        <source>Generate Requirements...</source>
+        <translation>Anforderungen erzeugen...</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1194"/>
+        <source>Generate Constraints...</source>
+        <translation>Constraints generieren...</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1201"/>
+        <source>Cache</source>
+        <translation>Zwischenspeicher</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1203"/>
         <source>Show Cache Info...</source>
         <translation>Zwischenspeicherinfo...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1199"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1206"/>
         <source>Show Cached Files...</source>
         <translation>Zwischengespeicherte Dateien...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1202"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1209"/>
         <source>Remove Cached Files...</source>
         <translation>Zwischengespeicherte Dateien löschen...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1205"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1212"/>
         <source>Purge Cache...</source>
         <translation>Zwischenspeicher leeren...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1210"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1229"/>
+        <source>Show Licenses...</source>
+        <translation>Lizenzen anzeigen...</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1233"/>
+        <source>Check Vulnerabilities</source>
+        <translation>Verwundbarkeiten prüfen</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1237"/>
+        <source>Update Vulnerability Database</source>
+        <translation>Verwundbarkeitsdatenbank aktualisieren</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1241"/>
+        <source>Create SBOM file</source>
+        <translation>STL Datei erzeugen</translation>
+    </message>
+    <message>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1248"/>
         <source>Edit User Configuration...</source>
         <translation>Nutzerkonfiguration bearbeiten...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1213"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1251"/>
         <source>Edit Environment Configuration...</source>
         <translation>Umgebungskonfiguration bearbeiten...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1218"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1256"/>
         <source>Configure...</source>
         <translation>Einstellungen...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1426"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1413"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1402"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1475"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1462"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1451"/>
         <source>Edit Configuration</source>
         <translation>Konfiguration bearbeiten</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1427"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1414"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1403"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1476"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1463"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1452"/>
         <source>No valid configuration path determined. Aborting</source>
         <translation>Es konnte kein gültiger Konfigurationspfad ermittelt werden. Abbruch</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1587"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1636"/>
         <source>{0} {1}</source>
         <comment>package name, package version</comment>
         <translation>{0} {1}</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1608"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1657"/>
         <source>Affected Version:</source>
         <translation>Betroffene Version:</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1611"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1660"/>
         <source>Advisory:</source>
         <translation>Advisory:</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1735"/>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1716"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1784"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1765"/>
         <source>unknown</source>
         <translation>unbekannt</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1732"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1781"/>
         <source>any</source>
         <translation>beliebig</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_empty.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31119,144 +31119,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
@@ -52101,42 +52101,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52167,6 +52173,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -52917,144 +52933,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_en.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31142,144 +31142,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
@@ -52146,42 +52146,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52212,6 +52218,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -52963,144 +52979,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_es.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31286,144 +31286,144 @@
       <translation>Copiar Changesets</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation>Copiar Changesets (Continuar)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation>Copiar Changesets (Stop)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation>Copiar Changesets (Abortar)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation>Crear Archivo Sin Versionar</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation>Borrar todas las Copias de Seguridad</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Desea realmente borrar todos los bundles de copia de seguridad almacenados en el área de copias de seguridad?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation>Añadir Sub-repositorio</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido leer el archivo .hgsub de sub-repositorios.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo .hgsub de sub-repositorios ya contiene una entrada.&lt;/p&gt;&lt;p&gt;Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido escribir al archivo .hgsub de sub-repositorios.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation>Eliminar Sub-repositorios</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de subrepositorios .hgsub no existe. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation>Servidor de Comandos de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El Servidor de Comandos de Mercurial no ha podido reiniciarse.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El Servidor de Comandos de Mercurial no ha podido iniciarse.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation>Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation>Borrar Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation>Seleccionar el marcador a borrar:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation>Borrar Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation>Renombrar Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation>Mover Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation>Pull de Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation>Seleccinar el marcador sobre el que hacer pull:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation>Haciendo pull de marcador desde un repositorio Mercurial remoto</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation>Push de Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation>Seleccinar el marcador sobre el que hacer push:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation>Haciendo push de marcador desde un repositorio Mercurial remoto</translation>
     </message>
@@ -52357,42 +52357,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation>Actualiza&amp;r</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation>Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation>Generar Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation>Actualiza&amp;r</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation>Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation>Los requisitos se han cambiado. ¿Desea sobreescribir los cambios?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation>No se han generado especificadores de package por parte de 'pip freeze'.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation>El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;TLos requisitos no se han podido escribir en &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
@@ -52423,6 +52429,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation>Archivo de Requisitos:</translation>
     </message>
@@ -53174,144 +53190,169 @@
       <translation>&lt;p&gt;No hay info de detalles de package disponible para &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation>Instalar Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation>Instalar Pip en el Sitio de Usuario</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation>Reparar Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation>Instalar Packages</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation>Instalar Package Local</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation>Instalar Requisitos</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Instalar</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation>Instalar Packages</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation>Instalar Package Local</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation>Reinstalar los Packages Seleccionados</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation>Desinstalar Requisitos</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation>Generar Requisitos...</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
-      <translation>Mostrar Licencias...</translation>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation>Comprobar Vulnerabilidades</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation>Actualizar Base de Datos de Vulnerabilidades</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation>Crear archivo SBOM</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation>Instalar Requisitos</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation>Desinstalar Requisitos</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation>Generar Requisitos...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished">Caché</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation>Mostrar info de Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation>Mostrar Archivos en Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation>Eliminar Archivos en Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation>Purgar Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation>Mostrar Licencias...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation>Comprobar Vulnerabilidades</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation>Actualizar Base de Datos de Vulnerabilidades</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation>Crear archivo SBOM</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation>Editar Configuración de Usuario...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation>Editar Configuración de Entorno...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation>Editar Configuración</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation>No hay una ruta válida de configuración determinada. Abortando</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation>{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation>Versión Afectada:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation>Recomendatorio:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation>desconocido</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation>cualquiera</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_fr.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31278,144 +31278,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation>Ajouter un sous-dépot</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation>Supprimer un sous-répertoire</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation>Signet Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation>Supprimer le signet</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation>Selectionner le signet à supprimer :</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation>Supprimer le signet Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation>Renommer le signet Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation>Déplacer le signet Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation>Récuperer le signet</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation>Sélectionner le signet à récuperer:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation>Récupérant le signet d'un dépôt Mercurial distant</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation>Envoyer signet</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation>Sélectionner le signet à envoyer:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation>À envoyer le signet à un dépôt Mercurial distant</translation>
     </message>
@@ -52325,42 +52325,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation>&amp;Rafraichir</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation>Fichiers texte (*.txt);;Tous les fichiers (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation>&amp;Rafraichir</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation>Fichiers texte (*.txt);;Tous les fichiers (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation>Le fichier &lt;b&gt;{0}&lt;/b&gt;existe déjà. Écraser ?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52391,6 +52397,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -53142,144 +53158,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation>Installer pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation>Réparer Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation>Installer des packages</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation>Installer un package local</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Installer</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation>Installer des packages</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation>Installer un package local</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation>Éditer la configuration utilisateur...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation>Configuration...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation>Éditer la configuration</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation>Pas de chemin de configuration déterminé. Annulation</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">inconnu</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_it.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31248,144 +31248,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished">Rimuovi sotto-archivi</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished">Segnalibro Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished">Cancella segnalibro</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished">Seleziona il segnalibro da cancellare:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished">Cancella Segnalibro Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished">Rinomina Segnalibro Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished">Sposta Segnalibro Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished">Estrai Segnalibro</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished">Seleziona il segnalibro da estrarre:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished">Etrae segnalibro da un repository Mercurial remoto</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished">Inserisce Segnalibro</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished">Seleziona il segnalibro da inserire:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished">Inserisce segnalibro in un repository Mercurial remoto</translation>
     </message>
@@ -52288,42 +52288,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation type="unfinished">File Testo(*.txt);;Tutti i file (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished">File Testo(*.txt);;Tutti i file (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52354,6 +52360,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -53105,144 +53121,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Installa</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished">Configura...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished">{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">sconosciuto</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_pt.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31248,144 +31248,144 @@
       <translation type="unfinished">Copiar Conjuntos de Alterações</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation>Retirar Sub Repositórios</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation>Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation>Apagar Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation>Selecionar o marcador a apagar:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation>Apagar o Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation>Renomear o Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation>Mover o Marcador de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation>Puxar Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation>Selecionar o marcador a puxar:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation>A puxar marcador desde o repositório remoto de Mercurial</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation>Empurrar Marcador</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation>Selecione o marcador a empurrar:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation>A empurrar marcador a um repositório remoto de Mercurial</translation>
     </message>
@@ -52275,42 +52275,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished">Atualiza&amp;r</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation type="unfinished">Ficheiros de Texto (*.txt);;Ficheiros Todos (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished">Atualiza&amp;r</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished">Ficheiros de Texto (*.txt);;Ficheiros Todos (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52341,6 +52347,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -53092,144 +53108,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Instalar</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished">Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">desconhecido</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_ru.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31334,144 +31334,144 @@
       <translation>Копировать наборы изменений</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation>Копировать наборы изменений (продолжение)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation>Копировать наборы изменений (Stop)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation>Копировать наборы изменений (Abort)</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation>Создать неверсированный архив</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation>Удалить все резервные копии</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Вы действительно хотите удалить все резервные комплекты, сохраненные в области резервного копирования'?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation>Добавить субрепозиторий</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно прочитать файл субрепозиториев .hgsub.&lt;b&gt;&lt;/b&gt;Причина {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл субрепозиториев .hgsub уже содержит запись &lt;b&gt;{0}&lt;/b&gt;. Отмена...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно записать файл субрепозиториев .hgsub.&lt;p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation>Удалить субрепозитории</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Отсутствует файл субрепозиториев .hgsub. Отмена...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation>Mercurial: Сервер команд</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Mercurial: Невозможно перезапустить сервер.&lt;br&gt;Причина: {0}.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Mercurial: Невозможно запустить сервер.&lt;br&gt;Причина: {0}.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation>Mercurial: Закладка</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation>Удалить закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation>Выберите закладку для удаления:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation>Mercurial: Удалить закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation>Mercurial: Переименовать закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation>Mercurial: Переместить закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation>Затянуть закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation>Выберите закладку для затягивания:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation>Затянуть закладку из удалённого Mercurial репозитория</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation>Протолкнуть закладку</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation>Выберите закладку для проталкивания:</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation>Mercurial: Проталкивание закладки в удалённый репозиторий</translation>
     </message>
@@ -52437,42 +52437,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation>&amp;Освежить</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation>Файлы текстовые (*.txt);;Все файлы (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation>Генерация зависимостей</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation>&amp;Освежить</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation>Файлы текстовые (*.txt);;Все файлы (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation>Зависимости были изменены. Вы действительно хотите записать эти изменения?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation>Нет спецификаторов пакета созданых 'pip freeze'.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation>Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Вы хотите перезаписать его?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&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>
@@ -52503,6 +52509,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation>Файл зависимостей:</translation>
     </message>
@@ -53255,146 +53271,171 @@
       <translation>&lt;p&gt;Недоступна подробная информация о пакете &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation>Инсталировать Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation>Инсталировать Pip в User-Site</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation>Восстановить Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation>Установить пакеты</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation>Установить локальный пакет</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation>Установить зависимости</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Установить</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation>Установить пакеты</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation>Установить локальный пакет</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation>Переинсталировать выбранные пакеты</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation>Деинсталировать зависимости</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation>Генерация зависимостей...</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
-      <translation>Показать лицензии...</translation>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation>Проверить уязвимости</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation>Обновить базу уязвимостей</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation>Создать файл SBOM</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation>Установить зависимости</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation>Деинсталировать зависимости</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation>Генерация зависимостей...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished">Кэш</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation>Показать информацию о кэше...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation>Показать кэшированные файлы...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation>Удалить кэшированные файлы...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation>Очистить кэш...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation>Показать лицензии...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation>Проверить уязвимости</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation>Обновить базу уязвимостей</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation>Создать файл SBOM</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation>Правка конфигурации пользователя...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation>Правка конфигурации среды окружения...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation>Настроить...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation>Правка конфигурации</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation>Не определен допустимый путь конфигурации. Прерывание</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation>{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translatorcomment>Подверженная уязвимости версия:  Пораженная версия Уязвимая</translatorcomment>
       <translation>Версия с уязвимостью:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translatorcomment>Консультация:  Рекомендация</translatorcomment>
       <translation>Advisory:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation>неизвестная</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation>любая</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_tr.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31203,144 +31203,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
@@ -52234,42 +52234,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation type="unfinished">Metin Dosyaları (*.txt);;Tüm Dosyalar (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished">Metin Dosyaları (*.txt);;Tüm Dosyalar (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52300,6 +52306,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -53051,144 +53067,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">Kur</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished">Ayarlanıyor...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">bilinmeyen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Sun Jul 17 18:47:23 2022 +0200
@@ -31222,144 +31222,144 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2640" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2638" />
       <source>Copy Changesets (Continue)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2652" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2648" />
       <source>Copy Changesets (Stop)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2664" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2658" />
       <source>Copy Changesets (Abort)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2687" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2681" />
       <source>Create Unversioned Archive</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2701" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2695" />
       <source>Delete All Backups</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2702" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2696" />
       <source>&lt;p&gt;Do you really want to delete all backup bundles stored in the backup area?&lt;br/&gt;&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2791" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2771" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2760" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2785" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2765" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2754" />
       <source>Add Sub-repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2828" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2761" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2822" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2755" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2772" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2766" />
       <source>&lt;p&gt;The sub-repositories file .hgsub already contains an entry &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2848" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2792" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2842" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2786" />
       <source>&lt;p&gt;The sub-repositories file .hgsub could not be written to.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2847" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2827" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2813" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2841" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2821" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2807" />
       <source>Remove Sub-repositories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2814" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2808" />
       <source>&lt;p&gt;The sub-repositories file .hgsub does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3064" />
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2927" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3058" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2921" />
       <source>Mercurial Command Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2928" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="2922" />
       <source>&lt;p&gt;The Mercurial Command Server could not be restarted.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3065" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3059" />
       <source>&lt;p&gt;The Mercurial Command Server could not be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3181" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3175" />
       <source>Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3197" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3191" />
       <source>Delete Bookmark</source>
       <translation type="unfinished">删除书签</translation>
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3198" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3192" />
       <source>Select the bookmark to be deleted:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3208" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3202" />
       <source>Delete Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3233" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3227" />
       <source>Rename Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3270" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3264" />
       <source>Move Mercurial Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3343" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3337" />
       <source>Pull Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3344" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3338" />
       <source>Select the bookmark to be pulled:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3356" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3350" />
       <source>Pulling bookmark from a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3382" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3376" />
       <source>Push Bookmark</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3383" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3377" />
       <source>Select the bookmark to be push:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3398" />
+      <location filename="../Plugins/VcsPlugins/vcsMercurial/hg.py" line="3392" />
       <source>Pushing bookmark to a remote Mercurial repository</source>
       <translation type="unfinished" />
     </message>
@@ -52230,42 +52230,48 @@
   <context>
     <name>PipFreezeDialog</name>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="44" />
-      <source>&amp;Refresh</source>
-      <translation type="unfinished">刷新(&amp;R)</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="239" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="51" />
-      <source>Text Files (*.txt);;All Files (*)</source>
-      <translation type="unfinished">文本文件 (*.txt);;所有文件 (*)</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="60" />
+      <source>Generate Constraints</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="237" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="215" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="200" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="121" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="269" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="247" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="229" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="143" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="63" />
       <source>Generate Requirements</source>
       <translation type="unfinished">生成必要文件</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="66" />
+      <source>&amp;Refresh</source>
+      <translation type="unfinished">刷新(&amp;R)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="271" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="73" />
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished">文本文件 (*.txt);;所有文件 (*)</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="144" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished">必要文件已改变。覆盖此更变?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="163" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="190" />
       <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="201" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <source>The file &lt;b&gt;{0}&lt;/b&gt; already exists. Do you want to overwrite it?</source>
       <translation type="unfinished">文件 &lt;b&gt;{0}&lt;/b&gt; 已存在。覆盖?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="216" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="248" />
       <source>&lt;p&gt;The requirements could not be written to &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;必要文件无法写入&lt;b&gt;{0}&lt;/b&gt;。&lt;/p&gt;&lt;p&gt;原因: {1}&lt;/P&gt;</translation>
     </message>
@@ -52296,6 +52302,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to include an '--constraint constraints.txt' statement</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Include Constraints</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished">必要文件:</translation>
     </message>
@@ -53046,144 +53062,169 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1150" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1152" />
+      <source>Pip</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1154" />
       <source>Install Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1153" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1157" />
       <source>Install Pip to User-Site</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1156" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
       <source>Repair Pip</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1300" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1160" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1163" />
-      <source>Install Local Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1167" />
-      <source>Install Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1170" />
+      <source>Install</source>
+      <translation type="unfinished">安装</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1332" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1169" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1172" />
+      <source>Install Local Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1175" />
       <source>Re-Install Selected Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1173" />
-      <source>Uninstall Requirements</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1176" />
-      <source>Generate Requirements...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1180" />
-      <source>Show Licenses...</source>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1182" />
+      <source>Requirements/Constraints</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="1184" />
-      <source>Check Vulnerabilities</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
-      <source>Update Vulnerability Database</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1192" />
-      <source>Create SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
+      <source>Install Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
+      <source>Uninstall Requirements</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1190" />
+      <source>Generate Requirements...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1194" />
+      <source>Generate Constraints...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1201" />
+      <source>Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1203" />
       <source>Show Cache Info...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1206" />
       <source>Show Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1202" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
       <source>Remove Cached Files...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1205" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
       <source>Purge Cache...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1229" />
+      <source>Show Licenses...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1233" />
+      <source>Check Vulnerabilities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1237" />
+      <source>Update Vulnerability Database</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1241" />
+      <source>Create SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1248" />
       <source>Edit User Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1213" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1251" />
       <source>Edit Environment Configuration...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1218" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1256" />
       <source>Configure...</source>
       <translation type="unfinished">配置…</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1426" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1413" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1402" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1475" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1462" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1451" />
       <source>Edit Configuration</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1427" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1414" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1403" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1476" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1463" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1452" />
       <source>No valid configuration path determined. Aborting</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1587" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1636" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation type="unfinished">{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1608" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1657" />
       <source>Affected Version:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1611" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1660" />
       <source>Advisory:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1716" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1784" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1765" />
       <source>unknown</source>
       <translation type="unfinished">未知</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1732" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1781" />
       <source>any</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial