Refactored the 'pip freeze' functionality and moved it to the main pip interface module. eric7

Sun, 13 Mar 2022 15:20:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 13 Mar 2022 15:20:26 +0100
branch
eric7
changeset 8976
ca442cd49b9e
parent 8975
ae4c3da05550
child 8977
663521af48b2

Refactored the 'pip freeze' functionality and moved it to the main pip interface module.

eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.PipInterface.Pip.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.PipInterface.PipFreezeDialog.html file | annotate | diff | comparison | revisions
eric7/PipInterface/Pip.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFreezeDialog.ui file | annotate | diff | comparison | revisions
eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/eric7/APIs/Python3/eric7.api	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/APIs/Python3/eric7.api	Sun Mar 13 15:20:26 2022 +0100
@@ -3048,6 +3048,7 @@
 eric7.PipInterface.Pip.Pip.cachePurge?4(venvName)
 eric7.PipInterface.Pip.Pip.cacheRemove?4(venvName)
 eric7.PipInterface.Pip.Pip.checkPackageOutdated?4(packageStart, envName)
+eric7.PipInterface.Pip.Pip.getFrozenPackages?4(envName, localPackages=True, usersite=False, requirement=None)
 eric7.PipInterface.Pip.Pip.getIndexUrl?4()
 eric7.PipInterface.Pip.Pip.getIndexUrlPypi?4()
 eric7.PipInterface.Pip.Pip.getIndexUrlSearch?4()
@@ -3083,13 +3084,14 @@
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_buttonBox_clicked?4(button)
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_copyButton_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_insertButton_clicked?4()
-eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_localCheckBox_clicked?4(checked)
+eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_localCheckBox_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_replaceAllButton_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_replaceSelectionButton_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_requirementsEdit_textChanged?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_requirementsFilePicker_textChanged?4(txt)
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_saveButton_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_saveToButton_clicked?4()
+eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.on_userCheckBox_clicked?4()
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog.start?4(venvName)
 eric7.PipInterface.PipFreezeDialog.PipFreezeDialog?1(pip, parent=None)
 eric7.PipInterface.PipPackageDetailsDialog.PipPackageDetailsDialog.ButtonInstall?7
Binary file eric7/Documentation/Help/source.qch has changed
--- a/eric7/Documentation/Help/source.qhp	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/Documentation/Help/source.qhp	Sun Mar 13 15:20:26 2022 +0100
@@ -11324,6 +11324,7 @@
       <keyword name="Pip.cachePurge" id="Pip.cachePurge" ref="eric7.PipInterface.Pip.html#Pip.cachePurge" />
       <keyword name="Pip.cacheRemove" id="Pip.cacheRemove" ref="eric7.PipInterface.Pip.html#Pip.cacheRemove" />
       <keyword name="Pip.checkPackageOutdated" id="Pip.checkPackageOutdated" ref="eric7.PipInterface.Pip.html#Pip.checkPackageOutdated" />
+      <keyword name="Pip.getFrozenPackages" id="Pip.getFrozenPackages" ref="eric7.PipInterface.Pip.html#Pip.getFrozenPackages" />
       <keyword name="Pip.getIndexUrl" id="Pip.getIndexUrl" ref="eric7.PipInterface.Pip.html#Pip.getIndexUrl" />
       <keyword name="Pip.getIndexUrlPypi" id="Pip.getIndexUrlPypi" ref="eric7.PipInterface.Pip.html#Pip.getIndexUrlPypi" />
       <keyword name="Pip.getIndexUrlSearch" id="Pip.getIndexUrlSearch" ref="eric7.PipInterface.Pip.html#Pip.getIndexUrlSearch" />
@@ -11381,6 +11382,7 @@
       <keyword name="PipFreezeDialog.on_requirementsFilePicker_textChanged" id="PipFreezeDialog.on_requirementsFilePicker_textChanged" ref="eric7.PipInterface.PipFreezeDialog.html#PipFreezeDialog.on_requirementsFilePicker_textChanged" />
       <keyword name="PipFreezeDialog.on_saveButton_clicked" id="PipFreezeDialog.on_saveButton_clicked" ref="eric7.PipInterface.PipFreezeDialog.html#PipFreezeDialog.on_saveButton_clicked" />
       <keyword name="PipFreezeDialog.on_saveToButton_clicked" id="PipFreezeDialog.on_saveToButton_clicked" ref="eric7.PipInterface.PipFreezeDialog.html#PipFreezeDialog.on_saveToButton_clicked" />
+      <keyword name="PipFreezeDialog.on_userCheckBox_clicked" id="PipFreezeDialog.on_userCheckBox_clicked" ref="eric7.PipInterface.PipFreezeDialog.html#PipFreezeDialog.on_userCheckBox_clicked" />
       <keyword name="PipFreezeDialog.start" id="PipFreezeDialog.start" ref="eric7.PipInterface.PipFreezeDialog.html#PipFreezeDialog.start" />
       <keyword name="PipInterface (Package)" id="PipInterface (Package)" ref="index-eric7.PipInterface.html" />
       <keyword name="PipPackageDetailsDialog" id="PipPackageDetailsDialog" ref="eric7.PipInterface.PipPackageDetailsDialog.html#PipPackageDetailsDialog" />
--- a/eric7/Documentation/Source/eric7.PipInterface.Pip.html	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/Documentation/Source/eric7.PipInterface.Pip.html	Sun Mar 13 15:20:26 2022 +0100
@@ -83,6 +83,10 @@
 <td>Public method to check, if a group of packages is outdated.</td>
 </tr>
 <tr>
+<td><a href="#Pip.getFrozenPackages">getFrozenPackages</a></td>
+<td>Public method to get the list of package specifiers to freeze them.</td>
+</tr>
+<tr>
 <td><a href="#Pip.getIndexUrl">getIndexUrl</a></td>
 <td>Public method to get the index URL for PyPI.</td>
 </tr>
@@ -319,6 +323,47 @@
 tuple of (bool, (str, str, str))
 </dd>
 </dl>
+<a NAME="Pip.getFrozenPackages" ID="Pip.getFrozenPackages"></a>
+<h4>Pip.getFrozenPackages</h4>
+<b>getFrozenPackages</b>(<i>envName, localPackages=True, usersite=False, requirement=None</i>)
+
+<p>
+        Public method to get the list of package specifiers to freeze them.
+</p>
+<dl>
+
+<dt><i>envName</i> (str)</dt>
+<dd>
+name of the environment to get the package specifiers
+            for
+</dd>
+<dt><i>localPackages</i> (bool)</dt>
+<dd>
+flag indicating to get package specifiers for
+            local packages only
+</dd>
+<dt><i>usersite</i> (bool)</dt>
+<dd>
+flag indicating to get package specifiers for packages
+            installed in user-site only
+</dd>
+<dt><i>requirement</i> (str)</dt>
+<dd>
+name of a requirements file
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of package specifiers
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
 <a NAME="Pip.getIndexUrl" ID="Pip.getIndexUrl"></a>
 <h4>Pip.getIndexUrl</h4>
 <b>getIndexUrl</b>(<i></i>)
--- a/eric7/Documentation/Source/eric7.PipInterface.PipFreezeDialog.html	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/Documentation/Source/eric7.PipInterface.PipFreezeDialog.html	Sun Mar 13 15:20:26 2022 +0100
@@ -115,6 +115,10 @@
 <td>Private slot to write the requirements text to a new file.</td>
 </tr>
 <tr>
+<td><a href="#PipFreezeDialog.on_userCheckBox_clicked">on_userCheckBox_clicked</a></td>
+<td>Private slot handling the switching of the user-site mode.</td>
+</tr>
+<tr>
 <td><a href="#PipFreezeDialog.start">start</a></td>
 <td>Public method to start the command.</td>
 </tr>
@@ -216,18 +220,11 @@
 </p>
 <a NAME="PipFreezeDialog.on_localCheckBox_clicked" ID="PipFreezeDialog.on_localCheckBox_clicked"></a>
 <h4>PipFreezeDialog.on_localCheckBox_clicked</h4>
-<b>on_localCheckBox_clicked</b>(<i>checked</i>)
+<b>on_localCheckBox_clicked</b>(<i></i>)
 
 <p>
         Private slot handling the switching of the local mode.
 </p>
-<dl>
-
-<dt><i>checked</i> (bool)</dt>
-<dd>
-state of the local check box
-</dd>
-</dl>
 <a NAME="PipFreezeDialog.on_replaceAllButton_clicked" ID="PipFreezeDialog.on_replaceAllButton_clicked"></a>
 <h4>PipFreezeDialog.on_replaceAllButton_clicked</h4>
 <b>on_replaceAllButton_clicked</b>(<i></i>)
@@ -279,6 +276,13 @@
 <p>
         Private slot to write the requirements text to a new file.
 </p>
+<a NAME="PipFreezeDialog.on_userCheckBox_clicked" ID="PipFreezeDialog.on_userCheckBox_clicked"></a>
+<h4>PipFreezeDialog.on_userCheckBox_clicked</h4>
+<b>on_userCheckBox_clicked</b>(<i></i>)
+
+<p>
+        Private slot handling the switching of the user-site mode.
+</p>
 <a NAME="PipFreezeDialog.start" ID="PipFreezeDialog.start"></a>
 <h4>PipFreezeDialog.start</h4>
 <b>start</b>(<i>venvName</i>)
--- a/eric7/PipInterface/Pip.py	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/PipInterface/Pip.py	Sun Mar 13 15:20:26 2022 +0100
@@ -771,6 +771,49 @@
         
         return result
     
+    def getFrozenPackages(self, envName, localPackages=True, usersite=False,
+                          requirement=None):
+        """
+        Public method to get the list of package specifiers to freeze them.
+        
+        @param envName name of the environment to get the package specifiers
+            for
+        @type str
+        @param localPackages flag indicating to get package specifiers for
+            local packages only
+        @type bool
+        @param usersite flag indicating to get package specifiers for packages
+            installed in user-site only
+        @type bool
+        @param requirement name of a requirements file
+        @type str
+        @return list of package specifiers
+        @rtype list of str
+        """
+        specifiers = []
+        
+        if envName:
+            interpreter = self.getVirtualenvInterpreter(envName)
+            if interpreter:
+                args = [
+                    "-m", "pip",
+                    "freeze",
+                ]
+                if localPackages:
+                    args.append("--local")
+                if usersite:
+                    args.append("--user")
+                if requirement and os.path.exists(requirement):
+                    args.append("--requirement")
+                    args.append(requirement)
+                
+                success, output = self.runProcess(args, interpreter)
+                if success and output:
+                    specifiers = [spec.strip() for spec in output.splitlines()
+                                  if spec.strip()]
+        
+        return specifiers
+    
     #######################################################################
     ## Cache handling methods below
     #######################################################################
--- a/eric7/PipInterface/PipFreezeDialog.py	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/PipInterface/PipFreezeDialog.py	Sun Mar 13 15:20:26 2022 +0100
@@ -66,13 +66,17 @@
         """
         e.accept()
     
-    @pyqtSlot(bool)
-    def on_localCheckBox_clicked(self, checked):
+    @pyqtSlot()
+    def on_localCheckBox_clicked(self):
         """
         Private slot handling the switching of the local mode.
-        
-        @param checked state of the local check box
-        @type bool
+        """
+        self.__refresh()
+    
+    @pyqtSlot()
+    def on_userCheckBox_clicked(self):
+        """
+        Private slot handling the switching of the user-site mode.
         """
         self.__refresh()
     
@@ -135,29 +139,25 @@
         self.__requirementsAvailable = False
         self.__environmentName = venvName
         
-        interpreter = self.__pip.getVirtualenvInterpreter(venvName)
-        if not interpreter:
-            return
-        
-        args = ["-m", "pip", "freeze"]
-        if self.localCheckBox.isChecked():
-            args.append("--local")
-        if self.requirementsFilePicker.text():
-            fileName = Utilities.toNativeSeparators(
-                self.requirementsFilePicker.text())
-            if os.path.exists(fileName):
-                args.append("--requirement")
-                args.append(fileName)
+        fileName = (
+            Utilities.toNativeSeparators(self.requirementsFilePicker.text())
+            if self.requirementsFilePicker.text() else
+            ""
+        )
         
         with EricOverrideCursor():
-            success, output = self.__pip.runProcess(args, interpreter)
+            specifiers = self.__pip.getFrozenPackages(
+                venvName, localPackages=self.localCheckBox.isChecked(),
+                usersite=self.userCheckBox.isChecked(), requirement=fileName)
             
-            if success:
-                self.requirementsEdit.setPlainText(output)
+            if specifiers:
+                self.requirementsEdit.setPlainText(
+                    "\n".join(specifiers) + "\n")
                 self.__requirementsAvailable = True
             else:
-                self.requirementsEdit.setPlainText(
-                    self.tr("No output generated by 'pip freeze'."))
+                self.requirementsEdit.setPlainText(self.tr(
+                    "No package specifiers generated by 'pip freeze'.")
+                )
         
         self.__updateButtons()
         
--- a/eric7/PipInterface/PipFreezeDialog.ui	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/PipInterface/PipFreezeDialog.ui	Sun Mar 13 15:20:26 2022 +0100
@@ -21,17 +21,44 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QCheckBox" name="localCheckBox">
-     <property name="toolTip">
-      <string>Select to show requirements for locally-installed packages only</string>
-     </property>
-     <property name="text">
-      <string>Local packages only</string>
-     </property>
-     <property name="checked">
-      <bool>true</bool>
-     </property>
-    </widget>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QCheckBox" name="localCheckBox">
+       <property name="toolTip">
+        <string>Select to show requirements for locally-installed packages only</string>
+       </property>
+       <property name="text">
+        <string>Local packages only</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="userCheckBox">
+       <property name="toolTip">
+        <string>Select to show requirements for packages installed to the user-site only</string>
+       </property>
+       <property name="text">
+        <string>User-Site only</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
@@ -160,6 +187,7 @@
  </customwidgets>
  <tabstops>
   <tabstop>localCheckBox</tabstop>
+  <tabstop>userCheckBox</tabstop>
   <tabstop>requirementsFilePicker</tabstop>
   <tabstop>requirementsEdit</tabstop>
   <tabstop>saveButton</tabstop>
--- a/eric7/i18n/eric7_cs.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_cs.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -54873,40 +54873,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -55033,18 +55033,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55074,6 +55074,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -94616,22 +94626,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished" />
     </message>
@@ -95952,12 +95962,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
Binary file eric7/i18n/eric7_de.qm has changed
--- a/eric7/i18n/eric7_de.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_de.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -51342,40 +51342,40 @@
       <translation>Pakete gem. Anforderungen deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation>Zwischenspeicherinformationen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation>Liste zwischengespeicherte Dateien</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation>Gib ein Dateinamenmuster ein (leer für alle):</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation>Zwischengespeicherte Dateien Löschen</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation>Gib ein Dateinamenmuster ein:</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation>Zwischenspeicher Leeren</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation>Liste zwischengespeicherte Dateien</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation>Gib ein Dateinamenmuster ein (leer für alle):</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation>Zwischengespeicherte Dateien Löschen</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation>Gib ein Dateinamenmuster ein:</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation>Zwischenspeicher Leeren</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Soll der pip Zwischenspeicher wirklich geleert werden? Alle Dateien müssen neu heruntergeladen werden.</translation>
     </message>
@@ -51494,19 +51494,19 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation>Anforderungen erzeugen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <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="160" />
-      <source>No output generated by 'pip freeze'.</source>
-      <translation>'pip freeze' erzeugte keine Ausgabe.</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
+      <translation>'pip freeze' erzeugte keine Paketspezifikationen.</translation>
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.py" line="199" />
@@ -51526,7 +51526,7 @@
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Select to show requirements for locally-installed packages only</source>
-      <translation>Auswählen, um nur die Anforderungen für lokal installierte Packete anzuzeigen</translation>
+      <translation>Auswählen, um nur die Spezifikationen für lokal installierte Packete anzuzeigen</translation>
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
@@ -51535,6 +51535,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation>Auswählen, um nur die Spezifikationen für im Nutzerverzeichnis installierte Packete anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation>Nur Nutzerverzeichnis</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation>Anforderungsdatei:</translation>
     </message>
@@ -89767,22 +89777,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation>Fragwürdige URL entdeckt</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;Die URL &lt;b&gt;{0}&lt;/b&gt; wurde in der Safe Browsing Datenbank gefunden.&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation>SSL Info</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation>Diese Seite enthält keine SSL Information.</translation>
     </message>
@@ -91121,12 +91131,12 @@
       <translation>Web Seite speichern</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation>Speicherplatzanfrage</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Website &lt;b&gt;{0}&lt;/b&gt; gestatten, &lt;b&gt;{1}&lt;/b&gt; permanenten Speicherplatz zu verwenden?&lt;/p&gt;</translation>
     </message>
--- a/eric7/i18n/eric7_empty.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_empty.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -51084,40 +51084,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -51236,18 +51236,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51277,6 +51277,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -89132,22 +89142,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished" />
     </message>
@@ -90466,12 +90476,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_en.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_en.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -51129,40 +51129,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -51281,18 +51281,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51322,6 +51322,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -89183,22 +89193,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished" />
     </message>
@@ -90520,12 +90530,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_es.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_es.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -51344,40 +51344,40 @@
       <translation>Desinstalar Packages a partir de Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation>Info de Cache</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation>Listar Archivos en Cache</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation>Introducir un patrón de archivo (dejar en blanco para todos):</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation>Eliminar Archivos en Cache</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation>Introducir un patrón de archivo:</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation>Purgar Cache</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation>Listar Archivos en Cache</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation>Introducir un patrón de archivo (dejar en blanco para todos):</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation>Eliminar Archivos en Cache</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation>Introducir un patrón de archivo:</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation>Purgar Cache</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Desear realmente purgar la cache de pip? Todos los archivos necesitarán descargarse de nuevo.</translation>
     </message>
@@ -51500,19 +51500,19 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation>Generar Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <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="160" />
-      <source>No output generated by 'pip freeze'.</source>
-      <translation>'pip freeze' no ha generado output.</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.py" line="199" />
@@ -51541,6 +51541,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished">Solo Site de Usuario</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation>Archivo de Requisitos:</translation>
     </message>
@@ -51599,6 +51609,10 @@
       <source>Replace All</source>
       <translation>Reemplazar Todo</translation>
     </message>
+    <message>
+      <source>No output generated by 'pip freeze'.</source>
+      <translation type="vanished">'pip freeze' no ha generado output.</translation>
+    </message>
   </context>
   <context>
     <name>PipPackageDetailsDialog</name>
@@ -89838,22 +89852,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation>Detectada URL sospechosa</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;La URL &lt;b&gt;{0}&lt;/b&gt; se ha encontrado en la base de datos de Navegación Segura.&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation>SSL Info</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation>Este site no contiene información SSL.</translation>
     </message>
@@ -91192,12 +91206,12 @@
       <translation>Guardar Página Web</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation>Solicitud de Cuota</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation>&lt;p&gt; ¿Permitir al sitio web &lt;b&gt;{0}&lt;/b&gt; utilizar &lt;b&gt;{1}&lt;/b&gt; de almacenamiento persistente?&lt;/p&gt;</translation>
     </message>
--- a/eric7/i18n/eric7_fr.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_fr.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -55148,40 +55148,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -55312,18 +55312,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55353,6 +55353,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -95341,22 +95351,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation>URL suspectes détectées</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished" />
     </message>
@@ -96678,12 +96688,12 @@
       <translation>Enregistrer la page web</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_it.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_it.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -56978,40 +56978,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -57138,18 +57138,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -57179,6 +57179,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -97258,22 +97268,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished">Informazioni SSL</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished">Questo sito non contiene informazioni SSL.</translation>
     </message>
@@ -98596,12 +98606,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_pt.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_pt.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -56467,40 +56467,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -56627,18 +56627,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56668,6 +56668,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -95746,22 +95756,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished">Informação SSL</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished">Este sítio não tem informação SSL.</translation>
     </message>
@@ -97084,12 +97094,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_ru.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_ru.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -51424,40 +51424,40 @@
       <translation>Деинсталяция пакетов, перечисленных в зависимостях</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation>Информация о кэше</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation>Список кэшированных файлов</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation>Задайте шаблон файлов (пустая строка - все файлы):</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation>Удалить кэшированные файлы</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation>Задайте шаблон файла:</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation>Очистить кэш</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation>Список кэшированных файлов</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation>Задайте шаблон файлов (пустая строка - все файлы):</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation>Удалить кэшированные файлы</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation>Задайте шаблон файла:</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation>Очистить кэш</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Вы действительно хотите очистить pip-кэш? Все файлы должны быть загружены снова.</translation>
     </message>
@@ -51580,19 +51580,19 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation>Генерация зависимостей</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation>Зависимости были изменены. Вы действительно хотите записать эти изменения?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
-      <translation>Команда 'pip freeze' ничего не создала.</translation>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.py" line="199" />
@@ -51621,6 +51621,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished">Только в user-site</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation>Файл зависимостей:</translation>
     </message>
@@ -51679,6 +51689,10 @@
       <source>Replace All</source>
       <translation>Заменить все</translation>
     </message>
+    <message>
+      <source>No output generated by 'pip freeze'.</source>
+      <translation type="vanished">Команда 'pip freeze' ничего не создала.</translation>
+    </message>
   </context>
   <context>
     <name>PipPackageDetailsDialog</name>
@@ -90067,22 +90081,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation>Обнаружен подозрительный URL</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;URL &lt;b&gt;{0}&lt;/b&gt; был найден в базе Safe Browsing.&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation>SSL инфо</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation>Этот сайт не содержит информации SSL.</translation>
     </message>
@@ -91423,12 +91437,12 @@
       <translation>Сохранить web-страницу</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation>Запрос квоты</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation>&lt;p&gt; Разрешить вебсайту &lt;b&gt;{0}&lt;/b&gt; использовать &lt;b&gt;{1}&lt;/b&gt; постоянного хранилища?&lt;/p&gt;</translation>
     </message>
--- a/eric7/i18n/eric7_tr.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_tr.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -55183,40 +55183,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -55343,18 +55343,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <source>The requirements were changed. Do you want to overwrite these changes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55384,6 +55384,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished" />
     </message>
@@ -94508,22 +94518,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished" />
     </message>
@@ -95843,12 +95853,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_zh_CN.ts	Sun Mar 13 12:46:57 2022 +0100
+++ b/eric7/i18n/eric7_zh_CN.ts	Sun Mar 13 15:20:26 2022 +0100
@@ -56048,40 +56048,40 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="789" />
+      <location filename="../PipInterface/Pip.py" line="832" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="814" />
-      <location filename="../PipInterface/Pip.py" line="806" />
-      <source>List Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="807" />
-      <source>Enter a file pattern (empty for all):</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="838" />
-      <location filename="../PipInterface/Pip.py" line="832" />
-      <source>Remove Cached Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="833" />
-      <source>Enter a file pattern:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="861" />
-      <location filename="../PipInterface/Pip.py" line="856" />
-      <source>Purge Cache</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="857" />
+      <location filename="../PipInterface/Pip.py" line="849" />
+      <source>List Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="850" />
+      <source>Enter a file pattern (empty for all):</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="881" />
+      <location filename="../PipInterface/Pip.py" line="875" />
+      <source>Remove Cached Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="876" />
+      <source>Enter a file pattern:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="904" />
+      <location filename="../PipInterface/Pip.py" line="899" />
+      <source>Purge Cache</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="900" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -56208,18 +56208,18 @@
       <location filename="../PipInterface/PipFreezeDialog.py" line="230" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="210" />
       <location filename="../PipInterface/PipFreezeDialog.py" line="198" />
-      <location filename="../PipInterface/PipFreezeDialog.py" line="118" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="122" />
       <source>Generate Requirements</source>
       <translation type="unfinished">生成必要文件</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipFreezeDialog.py" line="119" />
+      <location filename="../PipInterface/PipFreezeDialog.py" line="123" />
       <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="160" />
-      <source>No output generated by 'pip freeze'.</source>
+      <location filename="../PipInterface/PipFreezeDialog.py" line="158" />
+      <source>No package specifiers generated by 'pip freeze'.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56249,6 +56249,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>Select to show requirements for packages installed to the user-site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
+      <source>User-Site only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipFreezeDialog.ui" line="0" />
       <source>Requirements File:</source>
       <translation type="unfinished">必要文件:</translation>
     </message>
@@ -96357,22 +96367,22 @@
   <context>
     <name>WebBrowserPage</name>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="195" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="189" />
       <source>Suspicuous URL detected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="196" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="190" />
       <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="663" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="657" />
       <source>SSL Info</source>
       <translation type="unfinished">SSL 信息</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserPage.py" line="664" />
+      <location filename="../WebBrowser/WebBrowserPage.py" line="658" />
       <source>This site does not contain SSL information.</source>
       <translation type="unfinished">这个站点未包括 SSL 信息。</translation>
     </message>
@@ -97692,12 +97702,12 @@
       <translation type="unfinished">保存网页</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2282" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2287" />
       <source>Quota Request</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/WebBrowserView.py" line="2283" />
+      <location filename="../WebBrowser/WebBrowserView.py" line="2288" />
       <source>&lt;p&gt; Allow the website at &lt;b&gt;{0}&lt;/b&gt; to use &lt;b&gt;{1}&lt;/b&gt; of persistent storage?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial