diff --git a/cpl.json b/cpl.json index e994bd05..fbfd02f4 100644 --- a/cpl.json +++ b/cpl.json @@ -29,7 +29,7 @@ "watchdog==2.0.2" ], "PythonVersion": ">=3.8", - "PythonPath": "", + "PythonPath": {}, "Classifiers": [] }, "BuildSettings": { diff --git a/src/cpl_cli/command/install_service.py b/src/cpl_cli/command/install_service.py index e057d7dc..35a8f9e3 100644 --- a/src/cpl_cli/command/install_service.py +++ b/src/cpl_cli/command/install_service.py @@ -48,7 +48,7 @@ class InstallService(CommandABC): Error.error('Found invalid dependencies in cpl.json.') return - Pip.set_executable(self._project_settings.python_path) + Pip.set_executable(self._project_settings.python_executable) for dependency in self._project_settings.dependencies: Console.spinner( f'Installing: {dependency}', @@ -69,7 +69,7 @@ class InstallService(CommandABC): :return: """ is_already_in_project = False - Pip.set_executable(self._project_settings.python_path) + Pip.set_executable(self._project_settings.python_executable) if self._project_settings is None or self._build_settings is None: Error.error('The command requires to be run in an CPL project, but a project could not be found.') diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index 66bda709..cb10733c 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -87,6 +87,9 @@ class NewService(CommandABC): f'sh_cpl=={version.parse(cpl.__version__)}' ], ProjectSettingsNameEnum.python_version.value: f'>={sys.version.split(" ")[0]}', + ProjectSettingsNameEnum.python_path.value: { + sys.platform: '' + }, ProjectSettingsNameEnum.classifiers.value: [] } diff --git a/src/cpl_cli/command/uninstall_service.py b/src/cpl_cli/command/uninstall_service.py index 8d052bf6..cdd86de4 100644 --- a/src/cpl_cli/command/uninstall_service.py +++ b/src/cpl_cli/command/uninstall_service.py @@ -40,7 +40,7 @@ class UninstallService(CommandABC): Console.error(f'Usage: cpl uninstall ') return - Pip.set_executable(self._project_settings.python_path) + Pip.set_executable(self._project_settings.python_executable) package = args[0] is_in_dependencies = False diff --git a/src/cpl_cli/command/update_service.py b/src/cpl_cli/command/update_service.py index de935006..ddbe611a 100644 --- a/src/cpl_cli/command/update_service.py +++ b/src/cpl_cli/command/update_service.py @@ -127,7 +127,7 @@ class UpdateService(CommandABC): :param args: :return: """ - Pip.set_executable(self._project_settings.python_path) + Pip.set_executable(self._project_settings.python_executable) self._check_project_dependencies() self._check_outdated() Pip.reset_executable() diff --git a/src/cpl_cli/configuration/project_settings.py b/src/cpl_cli/configuration/project_settings.py index cb4dd4dd..d9e8413b 100644 --- a/src/cpl_cli/configuration/project_settings.py +++ b/src/cpl_cli/configuration/project_settings.py @@ -30,6 +30,7 @@ class ProjectSettings(ConfigurationModelABC): self._dependencies: Optional[list[str]] = None self._python_version: Optional[str] = None self._python_path: Optional[str] = None + self._python_executable: Optional[str] = None self._classifiers: Optional[list[str]] = None @property @@ -88,6 +89,10 @@ class ProjectSettings(ConfigurationModelABC): def python_path(self) -> str: return self._python_path + @property + def python_executable(self) -> str: + return self._python_executable + @property def classifiers(self) -> list[str]: return self._classifiers @@ -107,9 +112,11 @@ class ProjectSettings(ConfigurationModelABC): self._license_description = settings[ProjectSettingsNameEnum.license_description.value] self._dependencies = settings[ProjectSettingsNameEnum.dependencies.value] self._python_version = settings[ProjectSettingsNameEnum.python_version.value] + self._python_path = settings[ProjectSettingsNameEnum.python_path.value] - if ProjectSettingsNameEnum.python_path.value in settings: - path = settings[ProjectSettingsNameEnum.python_path.value] + if ProjectSettingsNameEnum.python_path.value in settings and \ + sys.platform in settings[ProjectSettingsNameEnum.python_path.value]: + path = settings[ProjectSettingsNameEnum.python_path.value][sys.platform] if not os.path.isfile(path) and not os.path.islink(path): if path != '' and path is not None: Error.warn(f'{ProjectSettingsNameEnum.python_path.value} not found') @@ -118,7 +125,7 @@ class ProjectSettings(ConfigurationModelABC): else: path = sys.executable - self._python_path = path + self._python_executable = path self._classifiers = settings[ProjectSettingsNameEnum.classifiers.value] except Exception as e: diff --git a/src/tests/custom/general/cpl.json b/src/tests/custom/general/cpl.json index 92bfd4f1..37ba225f 100644 --- a/src/tests/custom/general/cpl.json +++ b/src/tests/custom/general/cpl.json @@ -20,7 +20,9 @@ "discord.py==1.6.0" ], "PythonVersion": ">=3.8", - "PythonPath": "../../../../cpl-env/bin/python3.9", + "PythonPath": { + "linux": "../../../../cpl-env/bin/python3.9" + }, "Classifiers": [] }, "BuildSettings": {