diff -r e3f0fc3bb6ff -r 6ee095b9d3bd src/eric7/Project/Project.py --- 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=""):