Pip: `pip uninstall` fails when called in the package's source dir

Created on 12 Jul 2019  Â·  3Comments  Â·  Source: pypa/pip

Environment

  • pip version: 19.1.1
  • Python version: 3.6.8
  • OS: macOS

Description

I installed a local package, spam, using python3 -m pip install --user .. If I try to uninstall my package when the package folder is in the current directory, I get the following:

$ pwd
/Users/me/spam
$ ls
README.md  setup.cfg  setup.py  test  tox.ini  spam
$ python3 -m pip uninstall --verbose spam
Not sure how to uninstall: spam 0.0.1 - Check: /Users/me/spam  # this line only shown with --verbose flag
Can't uninstall 'spam'. No files were found to uninstall.

The uninstall completes successfully when I run it from a different directory:

$ cd \tmp && python3 -m pip uninstall --verbose spam
# successfully uninstalls...

Expected behavior
I did not expect uninstall to be sensitive to the contents of the local directory. If this is the expected behavior for technical reasons, I would change the stderr message Can't uninstall 'spam'. No files were found to uninstall. to be more helpful in indicating that the failure could be because there is a local folder with the target package's name.

UX UX- error messages enhancement

Most helpful comment

@pfmoore I think your edited message is definitely an improvement (and would have saved me some time), but I would go even further. What about something more instructive, like Can't uninstall 'spam' (in current directory). No files were found to uninstall.\nTo uninstall 'spam' from the system library, run the same command from a directory without a 'spam' directory. (and change system library if there is a more precise term). Is that too verbose?

It seems like the only time someone would ever bump up against this message is if they were in a similar situation to me. I may be wrong, but uninstalling from the current directory like cd path/to/site-packages && python3 -m pip uninstall spam seems like a marginal use case, and if someone knows enough to be doing that, then a message tuned for mouth-breathers like me will not confuse them.

It seems that most users just assume – like I did ;-) – that uninstall is going to magically go find the package in the system library.

All 3 comments

Maybe amend the error in this case to say Can't uninstall 'spam' (found in current directory). No files were found to uninstall.?

@pfmoore I think your edited message is definitely an improvement (and would have saved me some time), but I would go even further. What about something more instructive, like Can't uninstall 'spam' (in current directory). No files were found to uninstall.\nTo uninstall 'spam' from the system library, run the same command from a directory without a 'spam' directory. (and change system library if there is a more precise term). Is that too verbose?

It seems like the only time someone would ever bump up against this message is if they were in a similar situation to me. I may be wrong, but uninstalling from the current directory like cd path/to/site-packages && python3 -m pip uninstall spam seems like a marginal use case, and if someone knows enough to be doing that, then a message tuned for mouth-breathers like me will not confuse them.

It seems that most users just assume – like I did ;-) – that uninstall is going to magically go find the package in the system library.

Maybe 'your computer' would be better than 'system library'?

Iteration on your suggestion @reynoldsnlp :

Can't uninstall 'spam' (in the current directory). No files were found to uninstall.\nTo uninstall 'spam' from your computer, run the same command from a directory that does not contain a 'spam' directory.

Is it clearer?

Was this page helpful?
0 / 5 - 0 ratings