Changed the embedded venv creation logic in Project.py because it was created twice for a new project. eric7

Thu, 22 Dec 2022 10:23:28 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 22 Dec 2022 10:23:28 +0100
branch
eric7
changeset 9638
6ee095b9d3bd
parent 9637
e3f0fc3bb6ff
child 9639
9e66fd88193c

Changed the embedded venv creation logic in Project.py because it was created twice for a new project.

src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Project.Project.html file | annotate | diff | comparison | revisions
src/eric7/Project/Project.py file | annotate | diff | comparison | revisions
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Source/eric7.Project.Project.html	Thu Dec 22 09:54:30 2022 +0100
+++ b/src/eric7/Documentation/Source/eric7.Project.Project.html	Thu Dec 22 10:23:28 2022 +0100
@@ -1275,7 +1275,7 @@
 </p>
 <a NAME="Project.__createEmbeddedEnvironment" ID="Project.__createEmbeddedEnvironment"></a>
 <h4>Project.__createEmbeddedEnvironment</h4>
-<b>__createEmbeddedEnvironment</b>(<i>upgrade=False</i>)
+<b>__createEmbeddedEnvironment</b>(<i>upgrade=False, force=False</i>)
 
 <p>
         Private method to create the embedded virtual environment.
@@ -1286,6 +1286,10 @@
 <dd>
 flag indicating an upgrade operation (defaults to False)
 </dd>
+<dt><i>force</i> (bool (optional))</dt>
+<dd>
+flag indicating to force the creation (defaults to False)
+</dd>
 </dl>
 <a NAME="Project.__createSBOMFile" ID="Project.__createSBOMFile"></a>
 <h4>Project.__createSBOMFile</h4>
--- a/src/eric7/Project/Project.py	Thu Dec 22 09:54:30 2022 +0100
+++ b/src/eric7/Project/Project.py	Thu Dec 22 10:23:28 2022 +0100
@@ -5150,7 +5150,9 @@
                 " is cleared first.</p>"
             )
         )
-        self.recreateVenvAct.triggered.connect(self.__createEmbeddedEnvironment)
+        self.recreateVenvAct.triggered.connect(
+            lambda: self.__createEmbeddedEnvironment(force=True)
+        )
         self.actions.append(self.recreateVenvAct)
 
         self.reloadAct.setEnabled(False)
@@ -6938,12 +6940,14 @@
             "system_site_packages": False,
         }
 
-    def __createEmbeddedEnvironment(self, upgrade=False):
+    def __createEmbeddedEnvironment(self, upgrade=False, force=False):
         """
         Private method to create the embedded virtual environment.
 
         @param upgrade flag indicating an upgrade operation (defaults to False)
         @type bool (optional)
+        @param force flag indicating to force the creation (defaults to False)
+        @type bool (optional)
         """
         from eric7.VirtualEnv.VirtualenvExecDialog import VirtualenvExecDialog
 
@@ -6951,52 +6955,54 @@
             ProjectVenvCreationParametersDialog,
         )
 
-        dlg = ProjectVenvCreationParametersDialog(
-            withSystemSitePackages=self.__venvConfiguration["system_site_packages"]
-        )
-        if dlg.exec() != QDialog.DialogCode.Accepted:
-            # user canceled the environment creation
-            self.__setEmbeddedEnvironmentProjectConfig(False)
-            return
-
-        pythonPath, withSystemSitePackages = dlg.getData()
-        configuration = {
-            "envType": "pyvenv",
-            "targetDirectory": os.path.join(self.getProjectPath(), ".venv"),
-            "openTarget": False,
-            "createLog": True,
-            "createScript": True,
-            "logicalName": self.__venvConfiguration["name"],
-            "pythonExe": pythonPath,
-        }
-
-        args = []
-        if upgrade:
-            args.append("--upgrade")
-        else:
-            if os.path.exists(os.path.join(self.getProjectPath(), ".venv")):
-                args.append("--clear")
-        if withSystemSitePackages:
-            args.append("--system-site-packages")
-        args.append(configuration["targetDirectory"])
-        dia = VirtualenvExecDialog(configuration, None)
-        dia.show()
-        dia.start(args)
-        dia.exec()
-
-        self.__venvConfiguration["system_site_packages"] = withSystemSitePackages
-
-        self.__configureEnvironment()
-        if not self.__venvConfiguration["interpreter"]:
-            # user canceled the environment creation, delete the created directory
-            shutil.rmtree(configuration["targetDirectory"], True)
-            self.__setEmbeddedEnvironmentProjectConfig(False)
-            return
-
-        if upgrade and not withSystemSitePackages:
-            # re-install the project into the upgraded environment
-            # Note: seems to fail on some systems with access to system site-packages
-            self.__installProjectIntoEnvironment()
+        if force or upgrade or not self.__findEmbeddedEnvironment():
+            dlg = ProjectVenvCreationParametersDialog(
+                withSystemSitePackages=self.__venvConfiguration["system_site_packages"]
+            )
+            if dlg.exec() != QDialog.DialogCode.Accepted:
+                # user canceled the environment creation
+                self.__setEmbeddedEnvironmentProjectConfig(False)
+                return
+
+            pythonPath, withSystemSitePackages = dlg.getData()
+            configuration = {
+                "envType": "pyvenv",
+                "targetDirectory": os.path.join(self.getProjectPath(), ".venv"),
+                "openTarget": False,
+                "createLog": True,
+                "createScript": True,
+                "logicalName": self.__venvConfiguration["name"],
+                "pythonExe": pythonPath,
+            }
+
+            args = []
+            if upgrade:
+                args.append("--upgrade")
+            else:
+                if os.path.exists(os.path.join(self.getProjectPath(), ".venv")):
+                    args.append("--clear")
+            if withSystemSitePackages:
+                args.append("--system-site-packages")
+            args.append(configuration["targetDirectory"])
+            dia = VirtualenvExecDialog(configuration, None)
+            dia.show()
+            dia.start(args)
+            dia.exec()
+
+            self.__venvConfiguration["system_site_packages"] = withSystemSitePackages
+
+            self.__configureEnvironment()
+            if not self.__venvConfiguration["interpreter"]:
+                # user canceled the environment creation, delete the created directory
+                shutil.rmtree(configuration["targetDirectory"], True)
+                self.__setEmbeddedEnvironmentProjectConfig(False)
+                return
+
+            if upgrade and not withSystemSitePackages:
+                # re-install the project into the upgraded environment
+                # Note: seems to fail on some systems with access to system
+                #       site-packages
+                self.__installProjectIntoEnvironment()
 
     @pyqtSlot()
     def __configureEnvironment(self, environmentPath=""):

eric ide

mercurial