Archive
[django] virtualenvwrapper with Python 3
Problem
Django 1.7 came out ten days ago. If you look at the updated poll tutorial, you will notice that it’s written for Python 3! So far I’ve used Python 2 only, so I thought I would redo this tutorial for two reasons: (1) learn about migrations, and (2) start using Python 3.
For my Django projects I use virtualenvwrapper to manage my virtual environments, so the first question was: how to create a Python 3 virt. env. with virtualenvwrapper?
Well, maybe my installation got corrupted somehow, but I ran into this problem:
$ mkvirtualenv -p `which python3` tmpenv
Running virtualenv with interpreter /usr/bin/python3
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 8, in <module>
import base64
File "/usr/lib/python3.4/base64.py", line 9, in <module>
import re
File "/usr/lib/python3.4/re.py", line 324, in <module>
import copyreg
File "/usr/local/lib/python2.7/dist-packages/copyreg.py", line 3, in <module>
from copy_reg import *
ImportError: No module named 'copy_reg'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 53, in apport_excepthook
if not enabled():
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 24, in enabled
import re
File "/usr/lib/python3.4/re.py", line 324, in <module>
import copyreg
File "/usr/local/lib/python2.7/dist-packages/copyreg.py", line 3, in <module>
from copy_reg import *
ImportError: No module named 'copy_reg'
Original exception was:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 8, in <module>
import base64
File "/usr/lib/python3.4/base64.py", line 9, in <module>
import re
File "/usr/lib/python3.4/re.py", line 324, in <module>
import copyreg
File "/usr/local/lib/python2.7/dist-packages/copyreg.py", line 3, in <module>
from copy_reg import *
ImportError: No module named 'copy_reg'
Solution
I posted this question to reddit (see here) and I found the following solution:
First, install pip3:
sudo apt-get install python3-pip sudo pip3 install virtualenvwrapper
Then, add the following lines to your .bashrc:
export WORKON_HOME=$HOME/.virtualenvs export PROJECT_HOME=$HOME/workspace # customize if needed export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv source /usr/local/bin/virtualenvwrapper.sh
Try if it works for you. In my case, I had to edit the file “/usr/local/bin/virtualenv“. I changed its first line to
#!/usr/bin/env python3
The consequence of changing the first line was that creating Python 3 environments became the default, but at least it works now.
Create a Python 3 virt. env.:
mktmpenv
Create a Python 2 virt. env.:
mktmpenv -p `which python2`
If you use the command “virtualenv“, it will also create Python 3 environments by default. Thus, “virtualenv myproject3” will be a Python 3 env., while “virtualenv -p python2 myproject2” will be a Python 2 env.
