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 /home/liam/dev/.virtualenvs/noots/bin/python
.
When I use which python
in the virtualenv I get:
/home/liam/dev/.virtualenvs/noots/bin/python
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 /usr/bin/python
To make things more confusing to me, if I run python3.5
it grabs python3.5 from the correct directory (i.e. /home/liam/dev/.virtualenvs/noots/bin/python3.5
)
I have not touched /home/liam/dev/.virtualenvs/noots/bin/
in anyway. python
and python3.5
are still both linked to python3
in that directory. Traversing to /home/liam/dev/.virtualenvs/noots/bin/
and running ./python
, ./python3
or ./python3.5
all work normally.
I am using virtualenvwrapper
if that makes a difference, however the problem seemed to occur recently, long after install virtualenv
and virtualenvwrapper
Advertisement
Answer
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.
td@mintyfresh ~ $ which python3 /usr/bin/python3 td@mintyfresh ~ $ ls -l /usr/bin/python3 lrwxrwxrwx 1 root root 9 Feb 17 2016 /usr/bin/python3 -> python3.4 td@mintyfresh ~ $
This is nice because non-shell programs running python get the same one I do and virtual environments work naturally.