Create a Python 3 virtual environment

I installed python3-virtualenv on Lubuntu 15.1 using the official Ubuntu package apt-get install python3-virtualenv. The official documentation indicates that a simple virtualenv . in my project directory should be enough to create the venv. This does nothing, because which virtualenv does nothing. (Nothing from which python-virtualenv and which python3-virtualenv also).

The package information, once installed, says that it installed /usr/lib/python3/dist-packages/virtualenv.py, so I invoke this under python3. It gives me this:

$ python3 /usr/lib/python3/dist-packages/virtualenv.py .
Running virtualenv with interpreter /usr/bin/python2
New python executable in ./bin/python2
Also creating executable in ./bin/python
Installing setuptools, pip...done.

Yep, when I look, everything in ./bin is python2. Is ubuntu's python3-virtualenv a dummy package for python2?

The official python documentation says use a different package: python3-venv. This seems to work when I pyvenv ., with python3 stuff in the ./bin directory.

How can I successfully create a Python 3 virtualenv?


venv is a convenience script to create virtual envs, but does not fully replace everything virtualenv can do. Using either is fine for most cases though. virtualenv is not obsolete.

python3 -m venv works after installing python3-venv because Debian strips out some scripts from the base Python package. python3-virtualenv doesn't put the virtualenv script on your path for some reason, but python-virtualenv does, and will work fine for either version.

It is not important which version virtualenv is installed for, it can produce envs for any installed version by passing -p pythonX (where X is the version). venv, being more simple, will only create envs of the version it is run from, and is only available since 3.3.

$ sudo apt-get install python-virtualenv
$ virtualenv -p python3 env
$ source ./env/bin/activate
$ sudo apt-get install python3-venv
$ python3 -m venv env
$ source ./env/bin/activate