Virtualenv uses wrong python, even though it is first in $PATH
My problem was that i recently moved my project with virtualenv to another location, due to this activate
script had wrong VIRTUAL_ENV
path.
$ cat path_to_your_env/bin/activate
... # some declarations
VIRTUAL_ENV="/path_to_your_env/bin/python" # <-- THIS LINE
export VIRTUAL_ENV
... # some declarations
To fix this, just update VIRTUAL_ENV
in activate
script.
Also you maybe need to fix first line of your bin/pip
to link to real python path.
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.
As tdelaney suggested in the comments, I ran alias
and found that I had previously aliased python
to /usr/bin/python3.5
in my .bashrc
.
I removed that alias from my .bashrc
, ran unalias python
, and source ~/.bashrc
and the problem was solved.
On Cygwin, I still have a problem even after I created symlink to point /usr/bin/python
to F:\Python27\python.exe
. Here, after source env/Scripts/activate
, which python
is still /usr/bin/python
.
After a long time, I figured out a solution. Instead of using virtualenv env
, you have to use virtualenv -p F:\Python27\python.exe env
even though you have created a symlink.