Returning to this thread because a more recent post reminded me about it.
Sure, but my confusion is generally about users who are trying to use python
, not py
– after all, they deliberately had the Python installer modify the PATH (twice!). I’m fairly sure this is the common case – people running into the issue are unaware of py
, and they find that pip list
shows something that was just installed, but python myscript.py
(or python
followed by trying an appropriate import
statement at the REPL) results in an ImportError
. I’m pretty sure that the reports I’ve seen generally involve people trying python
rather than py
.
This is interesting, but I’m not sure I understand the exact conditions under which the “App Paths” key is used – i.e., what conditions would cause the mentioned API functions to be used. For my purposes I’m only interested in things that could happen at a command line (but if Powershell works differently from CMD then that’s definitely noteworthy), not e.g. using subprocess
.
I just want to point out the magnitude of the problem while I’m here:
Dozens of other questions have been closed as a duplicate of this, because it seems to be the best available option for answering the question. And it’s… not good. The top/accepted answer there is still some cargo-culting about permissions and sudo
– and other highly-voted answers are also less than ideal. There are even suggestions to hack sys.path
to reach into the site-packages
of other Python installations!
Other slightly-less-popular candidates are at least as bad. For example, I found a highly-voted answer on one of them suggesting that BeautifulSoup4 (specifically) should be installed using Pip for 2.x, but the system package manager for 3.x – using sudo
either way.
Hardly anyone understands it properly, and those who do understand it properly have a rough time getting their voices heard.
Nevertheless, new Python installations ordinarily include Pip, even if there is another Python somewhere with its own Pip; and the new Pip will default to installing for the Python it came with – i.e., the wrapper executable has such a shebang on Linux, and to my understanding will choose the corresponding Python explicitly on Windows using whatever Windows API tools (since it’s a compiled program rather than a .bat… IIRC). That’s what I was getting at.
Thanks for the references for command-line options to Pip. However, it wasn’t clear to me from the documentation what the exact semantics of --prefix
and --target
are, how one would choose one over the other, or why one would want either of them rather than --python
now that it exists (i.e., why would I want Pip to run using a different Python than the one for which I want it to install the package?). It’s also a little harder to find out about --prefix
and --target
because they’re specific to pip install
– although I guess that doesn’t matter here.
Is there a central piece of documentation somewhere that explains what constraints are relevant and why the situation is as it is? If not, I’d be interested in doing the necessary research etc. for it. But hopefully there would at least be a good place to put it within the Pip documentation… ?