Table of Contents

Python Development Environment

As most of the time, we'll start with our Debian Template VM

Python Versions

Although Python 3 is the current version, many applications and scripts are still depending on Python 2.

Also Python 2 is the standard installed version on Debian 8 Jessie

> python -V
Python 2.7.9

To make things clearer one could use the python2 command, to have a look at the available commands:

> ls -la /usr/bin | grep -ie python
-rwxr-xr-x  1 root   root       1056 Mar 16  2015 dh_python2
lrwxrwxrwx  1 root   root         23 Jun 29  2016 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx  1 root   root          9 Mar 16  2015 python -> python2.7
lrwxrwxrwx  1 root   root          9 Mar 16  2015 python2 -> python2.7
-rwxr-xr-x  1 root   root    3781768 Jun 29  2016 python2.7
lrwxrwxrwx  1 root   root         29 Mar 16  2015 pyversions -> ../share/python/pyversions.py

It seems that, contrary to most other distributions, having Python (2.7) installed on Debian doesn't imply pip being available, let's install it:

PIP (2)

> sudo apt-get install python-pip python-dev build-essential
> pip -V
pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)

Python 3 + PIP (3)

> sudo apt-get install python3 python3-dev python3-pip

We now have the Python and pip versions available:

> python -V
Python 2.7.9
> pip -V
pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
> python2 -V
Python 2.7.9
> pip2 -V
pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
> python3 -V
Python 3.4.2
> pip3 -V
pip 1.5.6 from /usr/lib/python3/dist-packages (python 3.4)

Notice that python and python2 are the same, this is also true for pip and pip2.

Virtual Environments

http://joebergantine.com/blog/2015/apr/30/installing-python-2-and-python-3-alongside-each-ot/

Virtual Environments are used to isolate python versions and package dependencies for each specific project.

We'll begin by creating specific users for python:

> adduser py2
...
<password>
...
> adduser py3
...
<password>
...

# To act as py2:
> su py2 

We'll install virtualenv for User only in order to allow coexistence of Python2 and Python3. As the virtualenv binary will bear the same name for 2 & 3, we'll move them on the go:

Virtualenv 2

> pip install --user virtualenv
> mv ~/.local/bin ~/.local/lib/python2.7/
> nano ~/.bashrc
ADD:
# USER INSTALLED BINARIES [virtualenv(wrapper)]
export PATH=$PATH:~/.local/bin/

> source ~/.bashrc
> virtualenv --version
15.1.0

To create a new directory for a virtualenv, and then activate it:

> virtualenv2 env_name
> source env_name/bin/activate
> cd env_name
[> deactivate]

To do the same in an existing directory, first move to this location and:

> cd /path/to/my/env
> virtualenv2 .
> source ./bin/activate
[> deactivate]

Virtualenv 3

Please note that in the case of virtualenv 15.1.0, the version seems to be compatible with both Python2 and Python3, so it might not be necessary to duplicate the operation, but we'll go for it anyways.

> pip3 install --user virtualenv
> mv ~/.local/bin ~/.local/lib/python3.4/
> nano ~/.bashrc
ADD:
alias virtualenv3='~/.local/lib/python3.4/bin/virtualenv'

> source ~/.bashrc
> virtualenv3 --version
15.1.0

Virtualenvwrapper

https://virtualenvwrapper.readthedocs.io/en/latest/

Installation & Configuration

Install virtualenvwrapper for python3 for the user only:

> pip3 install --user virtualenvwrapper
> mv ~/.local/bin/* ~/.local/lib/python3.4/bin/
> rm ~/.local/bin
> mkdir -p projects/code
> nano .bashrc
ADD:

# USER INSTALLED BINARIES [virtualenv(wrapper)]
export PATH=~/.local/bin:$PATH

# VIRTUALENVWRAPPER
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME[/code]
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python[2|3]
export VIRTUALENVWRAPPER_VIRTUALENV=$HOME/.local/bin/virtualenv

source $HOME/.local/bin/virtualenvwrapper.sh

> source .bashrc
virtualenvwrapper.user_scripts creating /home/dev/.virtualenvs/premkproject
...
...
virtualenvwrapper.user_scripts creating /home/dev/.virtualenvs/get_env_details

> mkvirtualenv temp
Using base prefix '/usr'
New python executable in /home/dev/.virtualenvs/temp/bin/python3
Also creating executable in /home/dev/.virtualenvs/temp/bin/python
Installing setuptools, pip, wheel...done.
...
...
(temp) >

Projects management

http://wiki.strategicz.com/vhyper/doku.php?id=vms:python:django#using_a_shared_folder_to_host_your_projects

> VBoxManage setextradata <VM_NAME> VBoxInternal2/SharedFoldersEnableSymlinksCreate/<SHARE_NAME> 1
> nano /etc/fstab

# automount shuup project space
<SHARE_NAME>   /home/dev3/projects   vboxsf   defaults,uid=1001,gid=1001,dmode=775,fmode=774,umask=002  0   0

https://virtualenvwrapper.readthedocs.io/en/latest/projects.html#project-management

Django

http://wiki.strategicz.com/vhyper/doku.php?id=vms:python:django