src/eric7/Project/Project.py

branch
eric7
changeset 9638
6ee095b9d3bd
parent 9632
dd907ee33b03
child 9639
9e66fd88193c
--- 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