Repository: spyder-ide/spyder

Issue:
PermissionError when Spyder is started
Error encountered when i open spyder



  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\external\lockfile.py", line 88, in symlink
    rename(newlinkname, filename)
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\mzeeqazi\\.spyder-py3\\spyder.lock.1517167725983.newlink' -> 'C:\\Users\\mzeeqazi\\.spyder-py3\\spyder.lock'

Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\app\start.py", line 118, in main
    lock_created = lock.lock()
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\external\lockfile.py", line 150, in lock
    symlink(str(os.getpid()), self.name)
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\external\lockfile.py", line 91, in symlink
    os.rmdir(newlinkname)
OSError: [WinError 145] The directory is not empty: 'C:\\Users\\mzeeqazi\\.spyder-py3\\spyder.lock.1517167725983.newlink'

Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\plugins\__init__.py", line 511, in <lambda>
    toggled=lambda checked: self.toggle_view(checked),
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\plugins\ipythonconsole.py", line 713, in toggle_view
    self.create_new_client(give_focus=False)
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\plugins\ipythonconsole.py", line 1009, in create_new_client
    self.connect_client_to_kernel(client)
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\plugins\ipythonconsole.py", line 1035, in connect_client_to_kernel
    stderr_file)
  File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\plugins\ipythonconsole.py", line 1440, in create_kernel_manager_and_kernel_client
    kernel_manager.start_kernel(stderr=stderr)
  File "D:\ProgramData\Anaconda3\lib\site-packages\jupyter_client\manager.py", line 257, in start_kernel
    **kw)
  File "D:\ProgramData\Anaconda3\lib\site-packages\jupyter_client\manager.py", line 203, in _launch_kernel
    return launch_kernel(kernel_cmd, **kw)
  File "D:\ProgramData\Anaconda3\lib\site-packages\jupyter_client\launcher.py", line 128, in launch_kernel
    proc = Popen(cmd, **kwargs)
  File "D:\ProgramData\Anaconda3\lib\subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "D:\ProgramData\Anaconda3\lib\subprocess.py", line 997, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified


## Version and main components

* Spyder Version: 3.2.4 
* Python Version: 3.6.3
* Qt Versions: 5.6.2, PyQt5 5.6 on Windows

## Dependencies
```
pyflakes >=0.6.0 :  1.6.0 (OK)
pycodestyle >=2.3:  2.3.1 (OK)
pygments >=2.0   :  2.2.0 (OK)
pandas >=0.13.1  :  0.20.3 (OK)
numpy >=1.7      :  1.13.3 (OK)
sphinx >=0.6.6   :  1.6.3 (OK)
rope >=0.9.4     :  0.10.5 (OK)
jedi >=0.9.0     :  0.10.2 (OK)
nbconvert >=4.0  :  5.3.1 (OK)
sympy >=0.7.3    :  1.1.1 (OK)
cython >=0.21    :  0.26.1 (OK)
qtconsole >=4.2.0:  4.3.1 (OK)
IPython >=4.0    :  6.1.0 (OK)
pylint >=0.25    :  1.7.4 (OK)

```



Discussion:
Thanks for reporting. This happens because you have Spyder installed in your `D:\` drive, but you're trying to run it in with your user, whose files are located in your `C:\` drive.

To fix this, you need to uninstall Anaconda and install it again for your user and in your `C\:` drive.
@CAM-Gerlach, this shows quite clearly that this recurrent problem is due to a permissions error.
I'll fix the first part:

> File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\external\lockfile.py", line 88, in symlink
rename(newlinkname, filename)
PermissionError: [WinError 5] Access is denied: 'C:\Users\mzeeqazi\.spyder-py3\spyder.lock.1517167725983.newlink' -> 'C:\Users\mzeeqazi\.spyder-py3\spyder.lock'

The second part was already fixed by @dalthviz in #6305.
@ccordoba12 Okay, thanks! I'll make sure to inform users thus when it inevitably gets reported again, and refer them to this issue as you have. Just to be clear, is that the reason you tagged me on this, or is there something else you'd like me to do? Thanks.
@mzeeqazi, could you help us to debug this? The problem is we are unable to reproduce it.
@CAM-Gerlach, I was wrong. @dalthviz work didn't fix this. I still don't understand why it happens.
@ccordoba12 How can i help you??

Thanks for reporting the full error @mzeeqazi! That was what made me finally realize the source of this problem: the removal of the conda environment used to start our kernels. So the second part of your problem is a duplicate of issue #4958.

You have two options to fix it until we do:

1. Run in a system terminal (cmd.exe) `spdyer --reset`.
2. Go to `Preferences > Python interpreter` and select either the Default interpreter or a new custom one.
I forgot that we still have to fix the first part of your problem.
@dalthviz, please work on this one. The idea is to address this problem

> File "D:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\external\lockfile.py", line 88, in symlink
rename(newlinkname, filename)
PermissionError: [WinError 5] Access is denied: 'C:\Users\mzeeqazi\.spyder-py3\spyder.lock.1517167725983.newlink' -> 'C:\Users\mzeeqazi\.spyder-py3\spyder.lock'

To solve it, we need to catch IOError and OSError around these lines

https://github.com/spyder-ide/spyder/blob/3.x/spyder/utils/external/lockfile.py#L91-L92

and `pass` in the except part.

Resolving patch:
diff --git a/spyder/utils/external/lockfile.py b/spyder/utils/external/lockfile.py
--- a/spyder/utils/external/lockfile.py
+++ b/spyder/utils/external/lockfile.py
@@ -88,8 +88,11 @@ def symlink(value, filename):    #analysis:ignore
         try:
             rename(newlinkname, filename)
         except:
-            os.remove(newvalname)
-            os.rmdir(newlinkname)
+            try:
+                os.remove(newvalname)
+                os.rmdir(newlinkname)
+            except (IOError, OSError):
+                pass
             raise
 
     def readlink(filename):   #analysis:ignore


Test patch: