From c500ab37358f9b33dd77d4eeca12c3e574bf0398 Mon Sep 17 00:00:00 2001 From: dalthviz Date: Mon, 29 Jan 2018 23:20:30 -0500 Subject: [PATCH 1/6] Add validation for the python interpreter. --- spyder/utils/ipython/kernelspec.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spyder/utils/ipython/kernelspec.py b/spyder/utils/ipython/kernelspec.py index c929f1429e1..458e0c08274 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,8 @@ 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() # Fixes Issue #3427 if os.name == 'nt': From 0c48c32d3288a948dfe400b4318adb688313051f Mon Sep 17 00:00:00 2001 From: dalthviz Date: Wed, 31 Jan 2018 18:21:06 -0500 Subject: [PATCH 2/6] Reset python interpreter option to defaults if needed. --- spyder/utils/ipython/kernelspec.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spyder/utils/ipython/kernelspec.py b/spyder/utils/ipython/kernelspec.py index 458e0c08274..4aef1bdf6b9 100644 --- a/spyder/utils/ipython/kernelspec.py +++ b/spyder/utils/ipython/kernelspec.py @@ -46,6 +46,7 @@ def argv(self): pyexec = CONF.get('main_interpreter', 'executable') if not is_python_interpreter(pyexec): pyexec = get_python_executable() + CONF.reset_to_defaults(section='main_interpreter') # Fixes Issue #3427 if os.name == 'nt': From 4f87bc8cd52e810b80e1e4ff33e1b2c18dee490d Mon Sep 17 00:00:00 2001 From: dalthviz Date: Wed, 31 Jan 2018 19:56:10 -0500 Subject: [PATCH 3/6] Add a test for the interpreter. --- .../utils/ipython/tests/test_spyder_kernel.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/spyder/utils/ipython/tests/test_spyder_kernel.py b/spyder/utils/ipython/tests/test_spyder_kernel.py index 840cdba02be..0f3572428b8 100644 --- a/spyder/utils/ipython/tests/test_spyder_kernel.py +++ b/spyder/utils/ipython/tests/test_spyder_kernel.py @@ -9,13 +9,35 @@ """ import os - +import os.path as osp import pytest +import tempfile from spyder.config.main import CONF from spyder.py3compat import PY2, is_binary_string from spyder.utils.encoding import to_fs_from_unicode from spyder.utils.ipython.kernelspec import SpyderKernelSpec +from spyder.utils.misc import get_python_executable + +# Temporary directory +TEMPLOCATION = tempfile.gettempdir() +INTERPRETER = osp.join(TEMPLOCATION, "interpreter") + + +def test_python_interpreter(): + """Test the validation of the python interpreter.""" + # Set a non existing python interpreter + 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 get_python_executable() 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, From d6e8f0ed64f942b34834774e6501d05287160463 Mon Sep 17 00:00:00 2001 From: dalthviz Date: Wed, 31 Jan 2018 20:45:50 -0500 Subject: [PATCH 4/6] Testing. --- spyder/utils/ipython/tests/test_spyder_kernel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spyder/utils/ipython/tests/test_spyder_kernel.py b/spyder/utils/ipython/tests/test_spyder_kernel.py index 0f3572428b8..86506c940e8 100644 --- a/spyder/utils/ipython/tests/test_spyder_kernel.py +++ b/spyder/utils/ipython/tests/test_spyder_kernel.py @@ -35,7 +35,7 @@ def test_python_interpreter(): kernel_spec = SpyderKernelSpec() # Assert that the python interprerter is the default one - assert get_python_executable() in kernel_spec.argv + assert INTERPRETER not in kernel_spec.argv assert CONF.get('main_interpreter', 'default') assert not CONF.get('main_interpreter', 'custom') From 52df8d8e864f2f419bbfec250d0f74e235175b99 Mon Sep 17 00:00:00 2001 From: dalthviz Date: Thu, 1 Feb 2018 11:47:39 -0500 Subject: [PATCH 5/6] Improvements and simplification. --- spyder/utils/ipython/kernelspec.py | 4 +++- spyder/utils/ipython/tests/test_spyder_kernel.py | 14 ++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/spyder/utils/ipython/kernelspec.py b/spyder/utils/ipython/kernelspec.py index 4aef1bdf6b9..236809ae1f1 100644 --- a/spyder/utils/ipython/kernelspec.py +++ b/spyder/utils/ipython/kernelspec.py @@ -46,7 +46,9 @@ def argv(self): pyexec = CONF.get('main_interpreter', 'executable') if not is_python_interpreter(pyexec): pyexec = get_python_executable() - CONF.reset_to_defaults(section='main_interpreter') + 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 86506c940e8..d4c1f109f1f 100644 --- a/spyder/utils/ipython/tests/test_spyder_kernel.py +++ b/spyder/utils/ipython/tests/test_spyder_kernel.py @@ -9,33 +9,27 @@ """ import os -import os.path as osp import pytest -import tempfile from spyder.config.main import CONF from spyder.py3compat import PY2, is_binary_string from spyder.utils.encoding import to_fs_from_unicode from spyder.utils.ipython.kernelspec import SpyderKernelSpec -from spyder.utils.misc import get_python_executable -# Temporary directory -TEMPLOCATION = tempfile.gettempdir() -INTERPRETER = osp.join(TEMPLOCATION, "interpreter") - -def test_python_interpreter(): +def test_python_interpreter(tmpdir): """Test the validation of the python interpreter.""" # Set a non existing python interpreter + interpreter = tmpdir.mkdir('interpreter') CONF.set('main_interpreter', 'default', False) CONF.set('main_interpreter', 'custom', True) - CONF.set('main_interpreter', 'executable', INTERPRETER) + 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 interpreter not in kernel_spec.argv assert CONF.get('main_interpreter', 'default') assert not CONF.get('main_interpreter', 'custom') From 19421098379725701051df08c322dba9b5682048 Mon Sep 17 00:00:00 2001 From: dalthviz Date: Fri, 2 Feb 2018 15:08:00 -0500 Subject: [PATCH 6/6] Change test interpreter. --- spyder/utils/ipython/tests/test_spyder_kernel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spyder/utils/ipython/tests/test_spyder_kernel.py b/spyder/utils/ipython/tests/test_spyder_kernel.py index d4c1f109f1f..1f08a21c0c7 100644 --- a/spyder/utils/ipython/tests/test_spyder_kernel.py +++ b/spyder/utils/ipython/tests/test_spyder_kernel.py @@ -20,7 +20,7 @@ def test_python_interpreter(tmpdir): """Test the validation of the python interpreter.""" # Set a non existing python interpreter - interpreter = tmpdir.mkdir('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)