Virtualenv uses wrong python, even though it is first in $PATH

python virtualenv
virtualenv python3 venv
virtualenv: error: the following arguments are required: dest
python venv environment variables
pip install virtualenv not working
tools for managing python virtual environments are not installed
specify python for virtualenv
pip install to specific python environment

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

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.

`pip install virtualenv` embeds absolute path to Python interpreter , Resolving from PATH is a potential source of errors, as the Python interpreter active on your PATH may not even have virtualenv python package, which on 1st March 2018 was upgraded to Python 3.x. bash-3.2$ virtualenv -ppython3 venv Running virtualenv with interpreter /usr/local/bin/python3 Using  When I try to run my Python program from bash script, it runs with wrong version of Python. ENV uses Python 2.6, while the system has 3.2 by default. I print Python version from Python script, and it prints 3.

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.

venv/bin/python does not set VIRTUAL_ENV (and PATH , This will change your $PATH so its first entry is the virtualenv's bin/ directory. in that the virtualenv's bin/python interpreter doesn't even set the PATH. Enable more consistent activation when using virtualenv's python  Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. Learn more venv Python uses incorrect sys.prefix

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.

Python and Virtual Environments, Usage. The basic usage is: $ python virtualenv.py ENV. If you install it you can This will change your $PATH so its first entry is the virtualenv's bin/ directory. This will change sys.path and even change sys.prefix, but also allow you to use an existing interpreter. Fix issue with installing the wrong version of distribute. Yes, the subprocess is creating a new environment for the execution of the call, one in which your modified PATH (as set by an activate script) is no longer present.. When running directly from venv\bin\python I believe you are coming across a coincidence that since venv\bin is the current working directory, the first pip found is the one find inside there.

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.

virtualenv · PyPI, Be cautious if you are using a python install that is managed by your operating system go down this path you need to ensure pip is new enough per the The first thing we need to be able to create a virtual environment is a python interpreter. version before the upgrade, even though now other than the  virtualenv --version If you see a version number (in my case 1.6.1), it’s already installed. >>1.6.1. Install Virtualenv. There are a number of ways to install virtualenv on your system. $ sudo apt-get install python-virtualenv $ sudo easy_install virtualenv $ sudo pip install virtualenv Setup and Use Virtualenv

I'm currently having the same problem. Virtualenv was created in Windows, now I'm trying to run it from WSL. In virtualenv I renamed python.exe to python3.exe(as I have only python3 command in WSL). In $PATH my virtualenv folder is first, there is no alias for python. I receive which python3 /usr/bin/python3. In /usr/bin/python3 there is symlink `python3 -> python3.6. I suppose it doesn't matter for order resolution.

[PDF] stable PDF, You can think of Virtual Environments as a separate Python installation which allows us Even if you don't work with conflicting packages and have full access to the if anything goes wrong with the project, your system-wide Python installation so that the bin/ directory of the virtual environment will become first in the list. The interpreter for Jupyter/R Studio/Spyder/etc. can’t find the right version of R or Python that you want to use, because your path variable is very confused.

How to use Virtualenv ?, If you don't use activate.bat, but just run the venv's python directly, what do you see? finds "python.exe" in __APPDIR__ before it even searches PATH. virtual environment, POpen() started subprocess executables are first  Virtualenv is a tool used to create an isolated Python environment. This environment has its own installation directories that doesn't share libraries with other virtualenv environments (and optionally doesn't access the globally installed libraries either).

Issue 38905: venv python reports wrong sys.executable in a , For my first several dozen attempts at using virtual environments, I managed to get something horribly wrong. They never worked. I hate to admit it, but I don't even know what I did anymore! A virtual environment, or virtualenv as it is sometimes called, is a sandbox where you can install only the Python  pipenv using wrong python @kennethreitz so the odd behavior was because it was using the first python that Removing existing virtualenv… Even though Python

Dead Simple Python: Virtual Environments and pip, By default, the version of Python found on the system PATH is checked first, and then use_virtualenv(), Specify the directory containing a Python virtualenv. If you want to use a specific alternate version you can use the conda parameter. The python in your new virtualenv is effectively isolated from the python that was used to create it. Python discovery ¶ The first thing we need to be able to create a virtual environment is a python interpreter.

Comments
  • Run alias on the command line to see if python has been aliased.
  • AH thank you! this was the problem.
  • Please post the solution, as this is an interesting Q.
  • I had renamed my project folder name and faced the same issue.
  • I can relate. That actually helped me.