virtualenv in Python
Creating isolated Python environnments is a great industrial practice to keep two or more applications separate from each other. These applications have different dependencies, e.g. one may use 1 version of an imported library and the other may use another version of it. To keep both these applications stable and decoupled from each other, it's best to create two different Python environments to avoid the hassle of why-is-this-application-running-and-why-is-this-not.
The Cheese Shop provides a library called virtualenv which helps the developers to create separate Python environments. Using this library, you can create a standalone Python environment for a project with a simple command. This standalone copy of Python has pip with it, which you can use to install libraries you need only for this project. These libraries will not be installed in the global copy of Python you have on your system. In order to recreate the same environment on another system, virtualenv enables us to create a text-file of all the installed libraries which you can provide to the new environment during its creation, and it will install them one-by-one on its own. Furthermore, virtualenv also allows you to choose which version of Python you want to work with by specifying it during environment creation command.
Let's go over all these steps in details. The $ in the below commands indicates that these are executed in the command prompt.
Installing virtualenv using pip
virtualenv can be installed using Python's out-of-the-box package manager pip.
$ python -m pip install virtualenv
The -m flag tells Python to run the specified module as a script.
Creating a virtual environment
Once virtualenv is installed, navigate to the folder where your application is situated. Open it, and press Shift + Right Click, click on Open command window here. In the popped-up command window, enter:
$ virtualenv virtualEnv01
This command will create a directory virtualEnv01 containing the Python executables along with a copy of pip, to facilitate installation of required libraries. The name specified virtalEnv01 is the name of our virtual environment, and you can name it anything you want.
Activating the Virtual Environment
Once our virtual environment is created, we need to tell the operating system that we will be working with this copy of Python environment. To do so, in the same command prompt, with curent directory as the directory where your virtual environment is placed:
$ cd Scripts $ activate.bat OR $ cd Scripts $ activate
You will notice that the name of your virtual environment i.e. virtualEnv01 will appear before the prompt e.g. (virtualEnv01) path_to_virtualEnv01\virtualEnv01\Scripts>. This indicates that it is activated now. Any library you install using pip will be installed in this environment. You can install a library using standard pip syntax i.e.
$ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\Scripts>cd .. $ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\> pip install cx_Oracle
Deactivating The Virtual Environment
When you have finished working on the current application, you can deactivate the virtual environment in order to return to the global installation of Python, or to activate another virtual environment.
$ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\>cd Scripts $ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\Scripts> deactivate.bat OR $ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\>cd Scripts $ (virtualEnv01) path_to_virtualEnv01\virtualEnv01\Scripts> deactivate
Deleting a Virtual Environment
If you wish to remove a virtual environment from disk, you can do so by removing the folder from disk.
Exporting and Importing Requirements
To obtain a list of all libraries you have installed using pip in the current virtual environment, you can use the freeze & list options of the pip command. The list option gives a list of the libraries, and the freeze option gives the versions along with each library name. With the virtual environment activated, execute the following commands:
$ pip list $ pip freeze
In order to redirect the output to a text file, you can use the > operator.
$ pip freeze > requirements.txt
In order to setup a new virtual environment from this list, you can use the -r flag of the pip command to install each of these libraries.
$ pip install -r requirements.txt
Setting up the virtual environment with a different version of Python
Suppose you are using Python 2 for developing a 2-D game using Pygame, and you are using Python 3 for making a blog with Django 1.8. If you have multiple versions of Python installed, you can specify which version of Python will be used in the virtual environment. This can be done by using the -p flag of virtualenv while creating the virtual environment.
$ virtualenv -p <path_to_particular_python.exe> virtualEnv01
For example, if you have 2.7 as well as 3.4 installed on your system, and Python executable of version 2.7 is located at C:/Python27, then put this path in the above command, i.e. :
$ virtualenv -p C:\Python27\python.exe virtualEnv01
Managing All Virtual Environments
Once you start to work with virtual environments, you will notice that you will have many different virtual environments lying around your system. It might even get difficult for you to find a particular application. The Cheese Shop offers another utility, virtualenvwrapper, which enables the user to manage different environments. It offers commands which help in dealing with multiple environments. It even provides tab-completion for environment names, which is really handy when you are dealing with many environmnets.
Installing virtualenvwrapper
It is available for download from The Cheese Shop. You can install it in the global Python installation using pip.
$ python -m pip install virtualenvwrapper
There is an alternative package in The Cheese Shop for Windows, by the name of virtualenvwrapper-win.
$ pip install virtualenvwrapper-win
Creating a Virtual Environment Via virtualenvwrapper
The mkvirtualenv command creates a virtual environment virtualEnv01 in the Envs directory.
In Windows, the default path for Envs is %USERPROFILE%Envs.
$ mkvirtualenv virtualEnv01
Upon execution of the above command, you will find the virtualEnv01 directory inside Envs. Also, you will notice that the provided virtual environment will be activated automatically.
Activating & Deactivating a Particular Virtual Environment
Use the workon command in command prompt to activate a particular environment.
$ workon virtualEnv01
You can shift environments by specifying a different environment name in the workon command. This will automatically deactivate the earlier environment and activate the new one. Alternatively, you can use the deactivate command to deactivate the current environment.
$ deactivate
Deleting a Particular Virtual Environment
You can use the rmvirtualenv command to remove a particular virtual environment. The associated directory will be removed from the Envs directory.
$ rmvirtualenv virtualEnv01
The Documentation of virtualenvwrapper lists a host of useful commands that you can use. It's worth a read if you are going to use the tool.