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?
If you use brew to install python, you will want to ensure that you set this environment variable:
in your bash_profile (or whatever shell you are using).
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 firstpython
andvirtualenv
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 interpreterVIRTUALENVWRAPPER_VIRTUALENV
to the full path of the virtualenvFor example, on my
.bash_profile
(Mac):Reload your new variables by running
source ~/.bash_profile
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 usepip2/pip3
. However, usingpip2/pip3
will create a problem becausevirtualenvwrapper
is now installed forpython2/python3
, but not forpython
. So whenvirtualenvwrapper
runs and calls python, it won't find thevirtualenvwrapper/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 dotfilesFollowing Jon's advice I ran:
I've left the .bashrc as listed above. As Jon stated above installing virtualenvwrapper installs on the default python, and uses the default python in any virtualenv you create unless the -p flag is used to specify a different python interpreter.
Thank you Jon!