diff --git a/spyder/utils/ipython/kernelspec.py b/spyder/utils/ipython/kernelspec.py index c929f1429e1..236809ae1f1 100644 --- a/spyder/utils/ipython/kernelspec.py +++ b/spyder/utils/ipython/kernelspec.py @@ -16,6 +16,7 @@ from spyder.config.base import get_module_source_path from spyder.config.main import CONF from spyder.utils.encoding import to_unicode_from_fs +from spyder.utils.programs import is_python_interpreter from spyder.py3compat import PY2, iteritems, to_text_string, to_binary_string from spyder.utils.misc import (add_pathlist_to_PYTHONPATH, get_python_executable) @@ -43,6 +44,11 @@ def argv(self): # to the kernel sys.path os.environ.pop('VIRTUAL_ENV', None) pyexec = CONF.get('main_interpreter', 'executable') + if not is_python_interpreter(pyexec): + pyexec = get_python_executable() + CONF.set('main_interpreter', 'executable', '') + CONF.set('main_interpreter', 'default', True) + CONF.set('main_interpreter', 'custom', False) # Fixes Issue #3427 if os.name == 'nt': diff --git a/spyder/utils/ipython/tests/test_spyder_kernel.py b/spyder/utils/ipython/tests/test_spyder_kernel.py index 840cdba02be..1f08a21c0c7 100644 --- a/spyder/utils/ipython/tests/test_spyder_kernel.py +++ b/spyder/utils/ipython/tests/test_spyder_kernel.py @@ -9,7 +9,6 @@ """ import os - import pytest from spyder.config.main import CONF @@ -18,6 +17,23 @@ from spyder.utils.ipython.kernelspec import SpyderKernelSpec +def test_python_interpreter(tmpdir): + """Test the validation of the python interpreter.""" + # Set a non existing python interpreter + interpreter = str(tmpdir.mkdir('interpreter').join('python')) + CONF.set('main_interpreter', 'default', False) + CONF.set('main_interpreter', 'custom', True) + CONF.set('main_interpreter', 'executable', interpreter) + + # Create a kernel spec + kernel_spec = SpyderKernelSpec() + + # Assert that the python interprerter is the default one + assert interpreter not in kernel_spec.argv + assert CONF.get('main_interpreter', 'default') + assert not CONF.get('main_interpreter', 'custom') + + @pytest.mark.skipif(os.name != 'nt' or not PY2, reason="It only makes sense on Windows and Python 2") def test_env_vars():