27

I installed Python, pip3, and virtualenv as in this guide for TensorFlow:

brew install python
pip3 install -U virtualenv

Then I was able to create a virtual environment with:

virtualenv --system-site-packages -p python3 ./venv

Then I tried installing TensorFlow with

pip install --upgrade tensorflow

but it failed because TensorFlow is not yet compatible with Python 3.7. So I removed Python 3.7 with brew remove python and installed 3.6.7 from an installer. But running the same virtualenv command now fails:

$ virtualenv --system-site-packages -p python3 ./venv
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python3.7: bad interpreter: No such file or directory
$ which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

So the virtualenv link to the executable lists the newest Python version, even after removal.

Furthermore, virtualenv lists brew as the user group, which is also confusing:

$ ls -la /usr/local/bin/virtualenv
-rwxr-xr-x  1 user  brew  232 29 Nov 17:06 /usr/local/bin/virtualenv

I've tried uninstalling virtualenv with both pip and pip3 and I get:

Skipping virtualenv as it is not installed.

How can I fix this issue?

7 Answers 7

12

After a few hours, one solution was to install virtualenv again with pip, then remove it with pip:

$ ls -la /usr/local/bin/virtualenv
-rwxr-xr-x  1 user  brew  232 29 Nov 17:06 /usr/local/bin/virtualenv
$ pip install virtualenv
...
$ pip uninstall virtualenv
...
$ which virtualenv
$ ls -la /usr/local/bin/virtualenv
ls: /usr/local/bin/virtualenv: No such file or directory

And then install it again with pip3:

$ pip3 install virtualenv
Collecting virtualenv
...
Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0

Notice the use of pip3, and not pip, unlike this link, pointed to by TensorFlow.

And now creating the virtual environment works:

$ virtualenv --system-site-packages -p python3 ./venv
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.6/bin/python3
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in ~/venv/bin/python3
Also creating executable in ~/venv/bin/python
Installing setuptools, pip, wheel...
done.
11

I created a symlink instead of copy.

brew install python@3.7
ln -s /usr/local/opt/python@3.7/bin/python3.7 /usr/local/opt/python/bin/python3.7
0
4

In my case, I had installed pipenv on MacOS with:

brew install pipenv

It was trying to use Python 3.6 instead of the 3.7 I actually had.

So I solved the issue by uninstalling:

brew uninstall pipenv

...then installing again with pip:

pip3 install pipenv
1
  • doesn't work for me. I'm using asdf and an existing pipenv installation. Jul 24, 2020 at 3:17
3

In my case, I was on MacOS and I had python3.9 installed, but virtualenv was installed using python3.7 and at some point I uninstalled python3.7.

$ /usr/local/bin/virtualenv --version
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python3.7: bad interpreter: No such file or directory

However, my python version:

$ which python3.9
/usr/local/bin/python3.9

No amount of pip or pip3 install/uninstall/install virtualenv worked for me. Finally I did the following:

$ python3.9 -m pip install --user virtualenv
Collecting virtualenv
  Using cached virtualenv-20.4.6-py2.py3-none-any.whl (7.2 MB)
<snip>
Successfully installed appdirs-1.4.4 distlib-0.3.1 filelock-3.0.12 virtualenv-20.4.6

And then

$ /usr/local/bin/virtualenv --version
virtualenv 20.4.6 from <mypath>

Yay!!

1

Try installing python@3.7 via homebrew and then cping that installation into the directory the program expects to find it.

brew install python@3.7
cp -r /usr/local/opt/python@3.7/bin/python3.7 /usr/local/opt/python/bin/python3.7
1
  • 1
    Why copy instead of symlink?
    – ErikE
    Mar 1, 2021 at 7:16
1

That solved the problem in my case: (my env file is called .venv)

mv .venv .venv_old
python3.7 -m venv .venv
source .venv/bin/activate
pip install wheel
pip install --upgrade pip wheel setuptools
pip install -r requirements.txt
1

In my case what solved the situation was adding a line at the end of the ~/.zshrc file:

export PATH=/usr/local/opt/python/libexec/bin:$PATH

hope it helps.

source

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.