13

Today, I went to change the config of matplotlib. Searching matplotlibrc revealed I have two of them:

Screenshot of search results, with two entries: <code>C:\Anaconda3\Lib\site-packages\~-tplotlib\mpl-data</code> and <code>C:\Anaconda3\Lib\site-packages\matplotlib\mpl-data</code>

Looking at the site-packages folder, I found a lot of packages have a tilde in their name:

Windows Explorer screenshot showing that site-packages contains many other folders starting with a <code>~</code> symbol, like <code>~klearn</code> and <code>~yximport</code>

  • ~klearn is sklearn , but there is another sklearn .
  • ~atplotlib is matplotlib too, changed date is 2018-11
  • ~-tplotlib's changed date is 2019-3.15
  • matplotlib's changed date is 2019-3.28 (I did update matplotlib recently)

What are these tilde name packages used for? Can I delete them safely?

Mark Amery
  • 143,130
  • 81
  • 406
  • 459
Mithril
  • 12,947
  • 18
  • 102
  • 153
  • 3
    In Windows convention a directory/file starting with ~ is mostly backup. Not sure if that's also the case with anaconda. You can try cut-pasting the directories to another one and see if everything works fine. – Ignatius Apr 08 '19 at 03:30
  • 1
    @Taegyung Alteady tested, fine after delete . But it shouldn't keep the old package like this . I afraid they have some other usage . – Mithril Apr 08 '19 at 03:32
  • 1
    You can check with `conda clean --all --dry-run` – darthbith Apr 08 '19 at 04:42
  • would there be a way todo a `pip clean` too? – studioj Nov 30 '22 at 12:16

1 Answers1

17

Is it possible that you installed those particular packages with pip? If so, then the mangled directories are probably the temporary directories that pip creates when it uninstalls a package (or when it uninstalls a package in preparation for updating a package).

I dug through the pip source code and found this snippet which is evidently only used on uninstalling packages:

class AdjacentTempDirectory(TempDirectory):
    """Helper class that creates a temporary directory adjacent to a real one.
    Attributes:
        original
            The original directory to create a temp directory for.
        path
            After calling create() or entering, contains the full
            path to the temporary directory.
        delete
            Whether the directory should be deleted when exiting
            (when used as a contextmanager)
    """
    # The characters that may be used to name the temp directory
    # We always prepend a ~ and then rotate through these until
    # a usable name is found.
    # pkg_resources raises a different error for .dist-info folder
    # with leading '-' and invalid metadata
    LEADING_CHARS = "-~.=%0123456789"

    ...

If that's what these files are, then you can safely delete them.

Leo
  • 1,135
  • 11
  • 14