pdm-project / pdm

A modern Python package and dependency manager supporting the latest PEP standards
https://pdm-project.org
MIT License
7.79k stars 385 forks source link

`pdm cache clear` breaks package cache #2758

Closed stfdxv closed 5 months ago

stfdxv commented 5 months ago

Make sure you run commands with -v flag before pasting the output.

Steps to reproduce

Create a new project.

pdm add cowsay
pdm remove cowsay
pdm cache clear
pdm add cowsay -v
Error ```bash (pdm_test-3.12) PS C:\Users\\PycharmProjects\pdm_test> pdm add cowsay -v Adding packages to default dependencies: cowsay STATUS: Resolving dependencies pdm.termui: ======== Start resolving requirements ======== pdm.termui: cowsay pdm.termui: python==3.12.* pdm.termui: Adding requirement cowsay pdm.termui: Adding requirement python==3.12.* pdm.termui: ======== Starting round 0 ======== STATUS: Resolving: new pin python==3.12.* pdm.termui: Pinning: python None pdm.termui: ======== Ending round 0 ======== pdm.termui: ======== Starting round 1 ======== STATUS: Resolving: new pin cowsay 6.1 pdm.termui: Pinning: cowsay 6.1 pdm.termui: ======== Ending round 1 ======== pdm.termui: ======== Starting round 2 ======== pdm.termui: ======== Resolution Result ======== pdm.termui: Stable pins: pdm.termui: python None pdm.termui: cowsay 6.1 STATUS: Fetching hashes for resolved packages... pdm.termui: Fetching hashes for cowsay@6.1 🔒 Lock successful Changes are written to pyproject.toml. STATUS: Resolving packages from lockfile... Synchronizing working set with resolved packages: 1 to add, 0 to update, 0 to remove pdm.termui: Using cached response for https://files.pythonhosted.org/packages/f1/13/63c0a02c44024ee16f664e0b36eefeb22d54e93531630bd99e237986f534/cowsay-6.1-py3-none-any.whl unearth.preparer: Downloading (25 kB) ✖ Install cowsay 6.1 failed pdm.termui: Error occurs: Traceback (most recent call last): File "C:\Program Files\Python312\Lib\concurrent\futures\thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\synchronizers.py", line 282, in install_candidate self.manager.install(can) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\manager.py", line 29, in install dist_info = install_package( ^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 180, in install_package dist_info_dir = install(source, destination=destination, additional_metadata=additional_metadata) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 194, in install _install(source, destination, additional_metadata=additional_metadata or {}) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\installer\_core.py", line 77, in install root_scheme = _process_WHEEL_file(source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\installer\_core.py", line 21, in _process_WHEEL_file stream = source.read_dist_info("WHEEL") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 64, in read_dist_info return self.package.dist_info.joinpath(filename).read_text("utf-8") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python312\Lib\pathlib.py", line 1027, in read_text with self.open(mode='r', encoding=encoding, errors=errors) as f: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python312\Lib\pathlib.py", line 1013, in open return io.open(self, mode, buffering, encoding, errors, newline) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\\\AppData\\Local\\pdm\\pdm\\Cache\\packages\\27\\cowsay-6.1-py3-none-any.whl.cache\\cowsay-6.1.dist-info\\WHEEL' Retry failed jobs ✖ Install cowsay 6.1 failed pdm.termui: Error occurs: Traceback (most recent call last): File "C:\Program Files\Python312\Lib\concurrent\futures\thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\synchronizers.py", line 282, in install_candidate self.manager.install(can) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\manager.py", line 29, in install dist_info = install_package( ^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 180, in install_package dist_info_dir = install(source, destination=destination, additional_metadata=additional_metadata) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 194, in install _install(source, destination, additional_metadata=additional_metadata or {}) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\installer\_core.py", line 77, in install root_scheme = _process_WHEEL_file(source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\installer\_core.py", line 21, in _process_WHEEL_file stream = source.read_dist_info("WHEEL") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\installers.py", line 64, in read_dist_info return self.package.dist_info.joinpath(filename).read_text("utf-8") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python312\Lib\pathlib.py", line 1027, in read_text with self.open(mode='r', encoding=encoding, errors=errors) as f: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python312\Lib\pathlib.py", line 1013, in open return io.open(self, mode, buffering, encoding, errors, newline) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\\\AppData\\Local\\pdm\\pdm\\Cache\\packages\\27\\cowsay-6.1-py3-none-any.whl.cache\\cowsay-6.1.dist-info\\WHEEL' Traceback (most recent call last): File "", line 198, in _run_module_as_main File "", line 88, in _run_code File "c:\users\\.local\bin\pdm.exe\__main__.py", line 7, in File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\core.py", line 341, in main return core.main(args or sys.argv[1:]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\core.py", line 259, in main raise cast(Exception, err).with_traceback(traceback) from None File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\core.py", line 254, in main self.handle(project, options) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\core.py", line 209, in handle command.handle(project, options) File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\cli\commands\add.py", line 69, in handle self.do_add( File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\cli\commands\add.py", line 178, in do_add do_sync( File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\cli\actions.py", line 238, in do_sync synchronizer.synchronize() File "C:\Users\\pipx\venvs\pdm\Lib\site-packages\pdm\installers\synchronizers.py", line 450, in synchronize raise InstallationError("Some package operations are not complete yet") pdm.exceptions.InstallationError: Some package operations are not complete yet ```

It looks like pdm clear cache doesn't clear everything. pdm cache info shows a non-zero package count, but zero size.

(pdm_test-3.12) PS C:\Users\<username>\PycharmProjects\pdm_test> pdm cache info 
Cache Root: C:\Users\<username>\AppData\Local\pdm\pdm\Cache, Total size: 53 kB
  File Hash Cache: C:\Users\<username>\AppData\Local\pdm\pdm\Cache\hashes
    Files: 0, Size: 0 bytes
  HTTP Cache: C:\Users\<username>\AppData\Local\pdm\pdm\Cache\http
    Files: 2, Size: 53 kB
  Wheels Cache: C:\Users\<username>\AppData\Local\pdm\pdm\Cache\wheels
    Files: 0, Size: 0 bytes
  Metadata Cache: C:\Users\<username>\AppData\Local\pdm\pdm\Cache\metadata
    Files: 0, Size: 0 bytes
  Package Cache: C:\Users\<username>\AppData\Local\pdm\pdm\Cache\packages
    Packages: 1, Size: 0 bytes

pdm cache clear packages fixes the problem.

Expected behavior

Should add cowsay without an error.

Environment Information

(pdm_test-3.12) PS C:\Users\<username>\PycharmProjects\pdm_test> pdm info
PDM version:
  2.13.2
Python Interpreter:
  C:\Users\<username>\PycharmProjects\pdm_test\.venv\Scripts\python.exe (3.12)
Project Root:
  C:/Users/<username>/PycharmProjects/pdm_test
Local Packages:

(pdm_test-3.12) PS C:\Users\<username>\PycharmProjects\pdm_test> pdm info --env            
{
  "implementation_name": "cpython",
  "implementation_version": "3.12.2",
  "os_name": "nt",
  "platform_machine": "AMD64",
  "platform_release": "10",
  "platform_system": "Windows",
  "platform_version": "10.0.19044",
  "python_full_version": "3.12.2",
  "platform_python_implementation": "CPython",
  "python_version": "3.12",
  "sys_platform": "win32"
}
frostming commented 5 months ago

It should be fixed by #2757