One of main features and troubles for Django projects is the Django version you are using. Example for this would be the occasion of starting project for Django 1.4.x version. Trying to run it under Django 1.7.x would lead to various troubles, counting template changes, misconfiguration errors and so on.
Solution is to use virtual environment. The tool for this is called Virtualenv. It is a wrapper for a python interpreter. It enables you to have multiple versions of python packages that run independently.
The Virtualenv creates you a standalone environment. Basically it copies and keeps a system Python of yours in a specified directory. All the python packages will be installed there. (In case you have not forgot to activate it first, of course)
Lets get started then. We need Virtualenv itself for the first. There are many ways to install it depending on your system. Most obvious to use pip. Your installation command will look something like that:
This installs the tool itself to your system. this only must be done once.
Assuming we have it now and going forward to usage basics. We need to create a virtual environment for our particular project. Usual rule for most of developers is to have a single virtual environment for a standalone project.
To create one for ours we need to be in the directory where we want it to reside. (Virtual environment is not movable by default). So choose wisely.
I suggest it be somewhere in the project directory. The directory that is up one step from the project one is ok too. Assuming we have a project that is called "example". I will enter the directory of that project:
We have here a manage.py file to run our project with and a project files directory. Seems like a nice place to create a virtual environment at. Time to do it with executing a command:
We have commanded our virtualenv to create a directory for our new project environment and call it venv. You could use any name here. it will indicate your projects name or whatever your fantasy is up to. Mine project directory now looks like this:
I have a mange.py script here, example directory with project files and a venv directory containig my environment files.
Now we have created a directory for environment and put our environment in it. However system is not aware we are using this environment. We must activate it now. Doing that is easy enough.
Assuming you are in the same project directory and called the virtual environment we are creating "venv". Execute a command:
This will tell the system we are using the interpreter set we have just created. It is indicated with (venv) at the start of your terminal prompt. this means we are "inside" the environment now.
Note we are in the same directory we where before.
Lets familiarise ourselves with main virtualenv functionality now. Whats the main point of it?
Simple. All the "pip install something" made now in this terminal will install a Python package inside this venv folder, leaving the main system python files intact. You can have as many environment as you wish. You can install whatever Python package you want inside of that virtual environment.
Now lets go through basic commands. Lets try to run our project now, assuming you have followed my previous instructions. To do that just type:
Whoops. We can not do that because there is no Django installed. Even though you have had it in system it does not seem to be present now.
All the credits to virtualenv activation command. (source path/to/activate/script). We have to have it installed in the environment now. However it is more convenient to look for ourselves there is no Dango in environment. Lets execute:
Tadaam. We only have wsgiref in our console environment now. Lets install django:
Tadaa. We have our django for the project now. Lets make sure with pip freeze:
And our project now can run inside a wrapper. Lets test with:
Yes it works.
Cons here that we must activate a virtual environment each time we want to seriously interact with our project. So even to run it we need to activate it first. but it is really the only option to work with multiple project in a system in an easy way.
To return the terminal to a proper state (back to system Python interpreter) you could just close it or deactivate the environment:
Tadaa. (venv) preceding the terminal prompt is gone and we are back to the system interpreter.
Hope this helps someone. Suggestions? Helped? Please comment! I will really appreciate all the info.
Solution is to use virtual environment. The tool for this is called Virtualenv. It is a wrapper for a python interpreter. It enables you to have multiple versions of python packages that run independently.
The Virtualenv creates you a standalone environment. Basically it copies and keeps a system Python of yours in a specified directory. All the python packages will be installed there. (In case you have not forgot to activate it first, of course)
Lets get started then. We need Virtualenv itself for the first. There are many ways to install it depending on your system. Most obvious to use pip. Your installation command will look something like that:
pip install virtualenv
Assuming we have it now and going forward to usage basics. We need to create a virtual environment for our particular project. Usual rule for most of developers is to have a single virtual environment for a standalone project.
To create one for ours we need to be in the directory where we want it to reside. (Virtual environment is not movable by default). So choose wisely.
I suggest it be somewhere in the project directory. The directory that is up one step from the project one is ok too. Assuming we have a project that is called "example". I will enter the directory of that project:
$ cd example garmoncheg:~/Projects/example$ ls -la total 8 drwxr-xr-x 4 garmoncheg staff 136B Jul 14 14:26 ./ drwxr-xr-x 3 garmoncheg staff 102B Jul 14 14:26 ../ drwxr-xr-x 6 garmoncheg staff 204B Jul 14 14:26 example/ -rw-r--r-- 1 garmoncheg staff 250B Jul 14 14:26 manage.py
$ virtualenv venv New python executable in venv/bin/python Installing setuptools............done. Installing pip...............done.
$ ls -l total 9 drwxr-xr-x 6 garmoncheg staff 204B Jul 14 14:26 example/ -rw-r--r-- 1 garmoncheg staff 250B Jul 14 14:26 manage.py drwxr-xr-x 6 garmoncheg staff 204B Jul 14 14:32 venv/
Now we have created a directory for environment and put our environment in it. However system is not aware we are using this environment. We must activate it now. Doing that is easy enough.
Assuming you are in the same project directory and called the virtual environment we are creating "venv". Execute a command:
$ source venv/bin/activate (venv)garmoncheg:~/Projects/example$
Note we are in the same directory we where before.
Lets familiarise ourselves with main virtualenv functionality now. Whats the main point of it?
Simple. All the "pip install something" made now in this terminal will install a Python package inside this venv folder, leaving the main system python files intact. You can have as many environment as you wish. You can install whatever Python package you want inside of that virtual environment.
Now lets go through basic commands. Lets try to run our project now, assuming you have followed my previous instructions. To do that just type:
(venv)$ ls total 9 drwxr-xr-x 6 garmoncheg staff 204B Jul 14 14:26 example/ -rw-r--r-- 1 garmoncheg staff 250B Jul 14 14:26 manage.py drwxr-xr-x 6 garmoncheg staff 204B Jul 14 14:32 venv/ (venv)garmoncheg:~/Projects/example$ python manage.py runserver Traceback (most recent call last): File "manage.py", line 8, in <module> from django.core.management import execute_from_command_line ImportError: No module named django.core.management
All the credits to virtualenv activation command. (source path/to/activate/script). We have to have it installed in the environment now. However it is more convenient to look for ourselves there is no Dango in environment. Lets execute:
(venv)garmoncheg:~/Projects/example$ pip freeze wsgiref==0.1.2
(venv)garmoncheg:~/Projects/example$ pip install django Downloading/unpacking django Downloading Django-1.6.5.tar.gz (6.6MB): 6.6MB downloaded Running setup.py egg_info for package django warning: no previously-included files matching '__pycache__' found under directory '*' warning: no previously-included files matching '*.py[co]' found under directory '*' Installing collected packages: django Running setup.py install for django changing mode of build/scripts-2.7/django-admin.py from 644 to 755 warning: no previously-included files matching '__pycache__' found under directory '*' warning: no previously-included files matching '*.py[co]' found under directory '*' changing mode of /Users/leopard/Developer/Python/Me/Tests/Projects/example/venv/bin/django-admin.py to 755 Successfully installed django Cleaning up...
(venv)garmoncheg:~/Projects/example$ pip freeze Django==1.6.5 wsgiref==0.1.2
(venv)leopard@garmoncheg:~/Projects/example$ python manage.py runserver Validating models... 0 errors found July 14, 2014 - 12:00:03 Django version 1.6.5, using settings 'example.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Cons here that we must activate a virtual environment each time we want to seriously interact with our project. So even to run it we need to activate it first. but it is really the only option to work with multiple project in a system in an easy way.
To return the terminal to a proper state (back to system Python interpreter) you could just close it or deactivate the environment:
(venv)garmoncheg:~/Projects/example$ deactivate garmoncheg:~/Projects/example$
Hope this helps someone. Suggestions? Helped? Please comment! I will really appreciate all the info.
Comments
Post a Comment