diff --git a/external-deps/spyder-kernels/.gitrepo b/external-deps/spyder-kernels/.gitrepo index a93c88d1081..2b67e126cf4 100644 --- a/external-deps/spyder-kernels/.gitrepo +++ b/external-deps/spyder-kernels/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = /Users/rclary/Documents/Repos/Spyder-IDE/spyder-kernels branch = ppm-syspath - commit = 250da79497cb46b5c686f90c1acb37a998ad4f4e - parent = 192a4ccf53b9803abf9faed49cefd028e1cc7dd9 + commit = a7a55e27f869f1fadbc80896311e5738f41fb89e + parent = 6e4c005158b75605253bbf6c1e9741876eab5ee6 method = merge cmdver = 0.4.6 diff --git a/external-deps/spyder-kernels/spyder_kernels/console/kernel.py b/external-deps/spyder-kernels/spyder_kernels/console/kernel.py index 331c88a241a..44a5e9a027d 100644 --- a/external-deps/spyder-kernels/spyder_kernels/console/kernel.py +++ b/external-deps/spyder-kernels/spyder_kernels/console/kernel.py @@ -76,11 +76,6 @@ def __init__(self, *args, **kwargs): # Socket to signal shell_stream locally self.loopback_socket = None - # Re-add current working directory path into sys.path after - # removing it before kernel started - if '' not in sys.path: - sys.path.insert(0, '') - # Store original sys.path. Kernels are started with PYTHONPATH # removed from environment variables, so this will never have # user paths and should be clean. @@ -795,8 +790,9 @@ def update_syspath(self, new_path, prioritize): # Ensure current directory is always first to imitate Python # standard behavior - sys.path.remove('') - sys.path.insert(0, '') + if '' in sys.path: + sys.path.remove('') + sys.path.insert(0, '') else: sys.path[:] = self._sys_path + new_path else: diff --git a/external-deps/spyder-kernels/spyder_kernels/console/start.py b/external-deps/spyder-kernels/spyder_kernels/console/start.py index c66c086fb3f..2d79a1ddb62 100644 --- a/external-deps/spyder-kernels/spyder_kernels/console/start.py +++ b/external-deps/spyder-kernels/spyder_kernels/console/start.py @@ -16,6 +16,15 @@ import sys import site +# Remove current directory from sys.path to prevent kernel +# crashes when people name Python files or modules with +# the same name as standard library modules. +# See spyder-ide/spyder#8007 +# Inject it back into sys.path after all imports in this module but +# before the kernel is initialized +while '' in sys.path: + sys.path.remove('') + # Third-party imports from traitlets import DottedObjectName @@ -29,14 +38,6 @@ def import_spydercustomize(): parent = osp.dirname(here) customize_dir = osp.join(parent, 'customize') - # Remove current directory from sys.path to prevent kernel - # crashes when people name Python files or modules with - # the same name as standard library modules. - # See spyder-ide/spyder#8007 - # Inject it back into sys.path after kernel starts - while '' in sys.path: - sys.path.remove('') - # Import our customizations site.addsitedir(customize_dir) import spydercustomize # noqa @@ -177,13 +178,6 @@ def main(): # Import our customizations into the kernel import_spydercustomize() - # Remove current directory from sys.path to prevent kernel - # crashes when people name Python files or modules with - # the same name as standard library modules. - # See spyder-ide/spyder#8007 - while '' in sys.path: - sys.path.remove('') - # Main imports from ipykernel.kernelapp import IPKernelApp from spyder_kernels.console.kernel import SpyderKernel @@ -216,6 +210,12 @@ def close(self): kernel.config = kernel_config() except: pass + + # Re-add current working directory path into sys.path after all of the + # import statements, but before initiializing the kernel. + if '' not in sys.path: + sys.path.insert(0, '') + kernel.initialize() # Set our own magics diff --git a/external-deps/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py b/external-deps/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py index 2b542bac08f..5636c727a74 100644 --- a/external-deps/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py +++ b/external-deps/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py @@ -524,17 +524,16 @@ def test_cwd_in_sys_path(): def test_prioritize(kernel): """Test that user path priority is honored in sys.path.""" syspath = kernel.get_syspath() - syspath.remove('') append_path = ['/test/append/path'] prepend_path = ['/test/prepend/path'] kernel.update_syspath(append_path, prioritize=False) new_syspath = kernel.get_syspath() - assert new_syspath == [''] + syspath + append_path + assert new_syspath == syspath + append_path kernel.update_syspath(prepend_path, prioritize=True) new_syspath = kernel.get_syspath() - assert new_syspath == [''] + prepend_path + syspath + assert new_syspath == prepend_path + syspath @flaky(max_runs=3)