No Module Named 'Virtualenvwrapper'

I am working to set up a Django project on Amazon EC2 with an Ubuntu 14.04 LTS instance. I want to write my code using Python 3. I've been advised that the best way to do this is to use virtualenvwrapper. I've installed virtualenvwrapper successfully and put

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

into my .bashrc file. Now I see:

 /usr/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportErro
 r'>: No module named 'virtualenvwrapper')
 virtualenvwrapper.sh: There was a problem running the initialization hooks.     

 If Python could not import the module virtualenvwrapper.hook_loader,
 check that virtualenvwrapper has been installed for
 VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4 and that PATH is
 set properly.

How can I fix this?

6

10 Answers

Instead of specifying a different python interpreter with -p flag, you can also config your desired interpreter as default.

According to virtualenvwrapper's documentation, virtualenvwrapper.sh finds the first python and virtualenv programs on the $PATH and remembers them to use later.

If your virtualenvwrapper is not installed on your OS's default python interpreter (/usr/bin/python), make sure you override the environment variables as below:

  • VIRTUALENVWRAPPER_PYTHON to the full path of your python interpreter
  • VIRTUALENVWRAPPER_VIRTUALENV to the full path of the virtualenv

For example, on my .bash_profile (Mac):

#virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/
export VIRTUALENVWRAPPER_VIRTUALENV=/Library/Frameworks/
source /Library/Frameworks/

Reload your new variables by running source ~/.bash_profile

1

I had the same problem after the recent Homebrew updates.

In the past, most people would have run pip install virtualenvwrapper into the system site packages and it would have worked.

Homebrew broke this workflow by 1) no longer shadowing the system python, and 2) no longer symlinking pip to pip2/pip3.

Most users will realize this when they can't find pip, and then try to use pip2/pip3. However, using pip2/pip3 will create a problem because virtualenvwrapper is now installed for python2/python3, but not for python. So when virtualenvwrapper runs and calls python, it won't find the virtualenvwrapper/virtualenv python packages in the system python's site packages.

Explicitly setting VIRTUALENVWRAPPER_PYTHON is the cleanest fix, and not a hack. Here's how I did it in my dotfiles

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
2

On Ubuntu 20.04, the problem can occur when trying to install virtualenvwrapper with python 3.8 (python 3 default) and init the wrapper with python 2.7 (python 2 default).

TL;DR

Manually set python3 interpreter

export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh
Marcus Vance

Marcus Vance

Cybersecurity & Digital Privacy Researcher

Marcus Vance is a cybersecurity auditor and technology writer dedicated to educating the public about online safety, data privacy regulations, enterprise security, and emerging cyber threats.