Pip installs to unexpected place
Thomas Passin
list1 at tompassin.net
Thu Apr 17 08:24:31 EDT 2025
On 4/17/2025 4:58 AM, Roel Schroeven via Python-list wrote:
> Op 15/04/2025 om 20:31 schreef Mats Wichmann via Python-list:
>> To be clear: you do not have to activate a virtualenv to use *Python*
>> from it. If you just call the python by the path it's in, it figures
>> everything out (and sets some variables you can query vi sysconfig if
>> you have reason to actually need those details (look for installation
>> schemes).
>>
>> What activating gives you is some path fiddling, and some prompt
>> fiddling (although the prompt fiddling keeps saying it's deprecated).
>> The latter is a visual clue; the former means you can also find
>> *other* commands installed in the virtualenv - including pip.
>>
>> /path/to/virtualenv//bin/python -m pip install ... will work whether
>> you activated or not.
>>
>> pip install ... finds the first command in your PATH named pip, which
>> may or may not be the one in the virtualenv, *unless* you've activated
>> it, because that's the only way the virtualenv bin directory ends up
>> early in your path.
Or you can cd to the venv directory and it will be first on the pythonpath.
> And the pip command that is found and run will use it's own settings
> regarding where to install packages, even if you activated a virtualenv.
> For example, you can't use /usr/bin/pip to install something in a
> virtualenv.
pip detects if you are running in a venv and changes its behavior to match.
To install something in a virtualenv, you need to use the
> pip in that virtualenv (either by first activating that venv, or by
> running something like venv/bin/pip, or venv). (Of course to do that pip
> needs to be installed in that venv. That might or might not be the case
> depending on how the venv was created.)
>
> I kinda get the feeling that something like that is going on here.
>
IMHO pip should always be run as a module, e.g., python3 -m pip. This
way you always get the same pip and environment as the python executable
that is being used.
More information about the Python-list
mailing list