invl / pip-autoremove

Remove a package and its unused dependencies.
Other
618 stars 42 forks source link

PermissionError when trying to uninstall dependent packages using pip-autoremove 0.10.1 on Windows #48

Open zhmlcg opened 2 years ago

zhmlcg commented 2 years ago

I installed pip-autoremove 0.10.1 (tresni/pip-autoremove) using command pip3 install git+https://github.com/tresni/pip-autoremove.git. Then, when I ran pip-autoremove to tried to remove package jupyterlab together with all its dependent packages, I got the following error:

... ...
... ... // many dependent packages of jupyterlab like Pygments-2.11.2 were successfully uninstalled
... ... 
ERROR: Exception:
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\cli\base_command.py", line 165, in exc_logging_wrapper
    status = run_func(*args)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\commands\uninstall.py", line 102, in run
    uninstall_pathset.commit()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\req\req_uninstall.py", line 420, in commit
    self._moved_paths.commit()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\req\req_uninstall.py", line 273, in commit
    save_dir.cleanup()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\utils\temp_dir.py", line 173, in cleanup
    rmtree(self._path)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_vendor\tenacity\__init__.py", line 326, in wrapped_f
    return self(f, *args, **kw)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_vendor\tenacity\__init__.py", line 406, in __call__
    do = self.iter(retry_state=retry_state)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_vendor\tenacity\__init__.py", line 362, in iter
    raise retry_exc.reraise()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_vendor\tenacity\__init__.py", line 195, in reraise
    raise self.last_attempt.result()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\concurrent\futures\_base.py", line 439, in result
    return self.__get_result()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\concurrent\futures\_base.py", line 391, in __get_result
    raise self._exception
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_vendor\tenacity\__init__.py", line 409, in __call__
    result = fn(*args, **kwargs)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip\_internal\utils\misc.py", line 124, in rmtree
    shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 739, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 617, in _rmtree_unsafe
    onerror(os.unlink, fullname, sys.exc_info())
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 615, in _rmtree_unsafe
    os.unlink(fullname)
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\~ywin32_system32\\pythoncom310.dll'
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\Scripts\pip-autoremove.exe\__main__.py", line 7, in <module>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\Scripts\pip_autoremove.py", line 164, in main
    autoremove(args, yes=opts.yes)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\Scripts\pip_autoremove.py", line 45, in autoremove
    remove_dists(dead)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\Scripts\pip_autoremove.py", line 123, in remove_dists
    subprocess.check_call(pip_cmd + ["uninstall", "-y"] + [d.project_name for d in dists])
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python310\\python.exe', '-m', 'pip', 'uninstall', '-y', 'Pygments', 'mypy-extensions', 'colorama', 'pywin32', 'jsonschema', 'wcwidth', 'pyzmq', 'notebook', 'ipykernel', 'packaging', 'nbconvert', 'attrs', 'pathspec', 'jupyter-client', 'jupyter-core', 'defusedxml', 'asttokens', 'nbclassic', 'json5', 'pytz', 'ipython', 'jupyterlab', 'parso', 'entrypoints', 'testpath', 'nbformat', 'prometheus-client', 'click', 'debugpy', 'nest-asyncio', 'terminado', 'sniffio', 'mistune', 'jupyter-server', 'python-dateutil', 'argon2-cffi-bindings', 'argon2-cffi', 'ipython-genutils', 'jupyterlab-server', 'backcall', 'matplotlib-inline', 'Jinja2', 'Babel', 'pyparsing', 'Send2Trash', 'nbclient', 'prompt-toolkit', 'pickleshare', 'webencodings', 'MarkupSafe', 'pandocfilters', 'platformdirs', 'pure-eval', 'anyio', 'stack-data', 'executing', 'pywinpty', 'traitlets', 'pyrsistent', 'black', 'pycparser', 'tornado', 'decorator', 'jedi', 'cffi', 'tomli', 'jupyterlab-pygments', 'websocket-client', 'bleach']' returned non-zero exit status 2.

I ran the cmd with Administrator privilege, so I have no idea why the permission error and how to fix this. Since tresni/pip-autoremove does not have Issues tab, I asked here. Thanks for your help.

My environment:

PS, as a side question, do I have to reinstall jupyterlab to continue uninstalling its dependent packages successfully?

me21 commented 2 years ago

I have this issue too. I think it is related to a specific package - pywin32 - that throws errors when being uninstalled by pip-autoremove, but I may be mistaken.

bestagi commented 1 year ago

I faced pretty much the same problem. error code The 'pywin32>=300; sys_platform == "win32" and platform_python_implementation != Distribution "PyPy"' not found and required by application

The proper pip-autoremove requires pywin32 but you end up running pip-autoremove jupyterlab which removes pywin32 from pip. to fix it just reinstall pywin32 with pip install pywin32 and you're all set.