I had a problem where
python was not finding modules installed by pip while in the virtualenv.
I have narrowed it down, and found that when I call
python when my virtualenv in activated, it still reaches out to
/usr/bin/python instead of
When I use
which python in the virtualenv I get:
When I look up my
$PATH variable in the virtualenv I get:
bash: /home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/.local/bin:/home/liam/bin:/home/liam/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
and yet when I actually run
python it goes to
To make things more confusing to me, if I run
python3.5 it grabs python3.5 from the correct directory (i.e.
I have not touched
/home/liam/dev/.virtualenvs/noots/bin/ in anyway.
python3.5 are still both linked to
python3 in that directory. Traversing to
/home/liam/dev/.virtualenvs/noots/bin/ and running
./python3.5 all work normally.
I am using
virtualenvwrapper if that makes a difference, however the problem seemed to occur recently, long after install
If you don’t get the program that
which says you should get, you need to look higher up the chain than the platform executor. Shells typically have a way to alias commands and on most unixy shells you can just enter
alias to see which commands have been remapped. Then its just a matter of going to the config files for your shell and removing the alias.
Sometimes people alias
python to try to sort out which python they should be using. But there are usually other, better ways. On my linux machine, for example,
python3 is in the path but is a symlink to the real python I am using.
[email protected] ~ $ which python3 /usr/bin/python3 [email protected] ~ $ ls -l /usr/bin/python3 lrwxrwxrwx 1 root root 9 Feb 17 2016 /usr/bin/python3 -> python3.4 [email protected] ~ $
This is nice because non-shell programs running python get the same one I do and virtual environments work naturally.
Answered By – tdelaney