Django Dev Environment Howto

49
Dev Environment How-To 29 Oct. 2013, Django Workshop @ CLBC

description

The Comprehensive Guide to Setting up a Development Environment for Django Project. Visit https://speakerdeck.com/uranusjr/django-dev-environment-howto if you like SpeakerDeck. :)

Transcript of Django Dev Environment Howto

Page 1: Django Dev Environment Howto

Dev Environment How-To

29 Oct. 2013, Django Workshop @ CLBC

Page 2: Django Dev Environment Howto
Page 3: Django Dev Environment Howto

Me

•TP (@uranusjr)

•http://uranusjr.logdown.com/pages/about

•RTFD

•Had a crash with Futura recently

Page 4: Django Dev Environment Howto

The (Most) Comprehensive Guide to Setting up a

Development Environment for Django Projects

Page 5: Django Dev Environment Howto

The (Most) Comprehensive Guide to Setting up a

Development Environment for Python Projects

Page 6: Django Dev Environment Howto

DjangoA Web Framework That Does Not Require a Mac

Page 7: Django Dev Environment Howto

Topics• Choose your database (carefully)

• Yes, when you develop

• Construct a perfect Python dev machine

• Linux

• OS X

Page 8: Django Dev Environment Howto

Topics• Choose your database (carefully)

• Yes, when you develop

• Construct a perfect Python dev machine

• Linux

• OS X

• Windows

Page 9: Django Dev Environment Howto

Topics

• Choose your database (carefully)

• Yes, when you develop

• Construct a perfect Python dev machine

• Other things

Page 10: Django Dev Environment Howto

Database

Page 11: Django Dev Environment Howto

Just use PostgreSQL

Page 12: Django Dev Environment Howto

Why?

• Free as in Freedom

• Recommended by dentists core developers

• Data migration

Page 13: Django Dev Environment Howto

Why?

• Free as in Freedom

• Recommended by core developers

• Data migration

Page 14: Django Dev Environment Howto

Matching Engines

• Different engines behave differently

• Fixtures are not for data migration

Page 15: Django Dev Environment Howto

Engine Behaviour

• A true story

• Handling long strings

• Type safety (if you use something raw)

• Bugs on production machine are hard to find

Page 16: Django Dev Environment Howto

Data Migration

• Fixtures do not represent your data completely

• They are just JSON, after all

• You can't rollback loaddata

• ContentTypes

Page 17: Django Dev Environment Howto

SQLite Is (Still) Useful

• Easy to wipe everything and start over

• Quick 'n' dirty tests

• Early stages during development

Page 18: Django Dev Environment Howto

But...

• MySQL is okay

• Even Oracle is okay if you don't care

• MariaDB

• Just use it

Page 19: Django Dev Environment Howto

Python Packages

Page 20: Django Dev Environment Howto

What Version of Python Should I Use?

Page 21: Django Dev Environment Howto

Python

• Anything over 2.7.0 should be enough

• YUM is still based on 2.6... Oops.

• Python 3 is coming…or not

• Having both Python 2 and 3 installed on Windows can be a nightmare

Page 22: Django Dev Environment Howto

Setuptools and PIP

• https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

• python ez_setup.py

• Modify PATH environment variable if needed

• easy_install pip

Page 23: Django Dev Environment Howto

Virtualenv

• pip install virtualenv

• virtualenvwrapper

• pip install virtualenvwrapper

• pip install virtualenvwrapper-win

• pip install virtualenvwrapper-powershell

Page 24: Django Dev Environment Howto

WUT?• setuptools = Python's package manager

• Ever heard of distribute?

• pip = Better easy_install alternative

• virtualenv = Prevent Python lib pollution

• virtualenvwrapper = Better virtualenv UI

• Windows variants

• Didi I hear somebody say APT?

Page 25: Django Dev Environment Howto

virtualenvwrapper• WORKON_HOME

• Load the commands (if needed)

• Commands

• mkvirtualenv

• workon

• Read the docs

Page 26: Django Dev Environment Howto

Django and Friends

• Always install packages inside virtualenv with pip

• pip install django

• pip install -r <requirement_file>

• pip freeze

Page 27: Django Dev Environment Howto

This is not enough.

Page 28: Django Dev Environment Howto

Python Has Limits

• Database connector

• Image processing

• Other heavy-lifting tasks

Page 29: Django Dev Environment Howto

PostgreSQL Libs (in C)• OS X

• Installer or Homebrew

• Linux

• Your favourite package manager

• Windows

• Installer

Page 30: Django Dev Environment Howto

pip install psycopg2

Page 31: Django Dev Environment Howto
Page 32: Django Dev Environment Howto
Page 33: Django Dev Environment Howto
Page 34: Django Dev Environment Howto

Build a C Extension

• Get a C compiler

• Install (or compile) library to bind with

• Install CPython headers

• apt-get install python-dev

• pip install <binding_package>

Page 35: Django Dev Environment Howto

Build a C Extension

• Get THE ONE TRUE C compiler

• Install (or compile) library to bind with

• Install CPython headers

• apt-get install python-dev

• pip install <binding_package>

Page 36: Django Dev Environment Howto

Get a Compiler• apt-get install build-essential

• OK, I got lazy :p

• Install Xcode and its "console tools"

• Install Visual Studio (Express)

• The "for Windows Desktop" version

• Use the correct prompt

Page 37: Django Dev Environment Howto
Page 38: Django Dev Environment Howto

VS90COMNTOOLS !

VS100COMNTOOLS

Until Python 3.2

Python 3.3

Page 39: Django Dev Environment Howto

VS90COMNTOOLSVisual Studio 2008

Page 40: Django Dev Environment Howto

VS100COMNTOOLSVisual Studio 2010

Page 41: Django Dev Environment Howto

set VS90COMNTOOLS=%VS110COMNTOOLS%

If you have VS2012 and Python 2.7, for example

Page 42: Django Dev Environment Howto
Page 43: Django Dev Environment Howto
Page 44: Django Dev Environment Howto

I No Want C Compiler!

• Pre-compiled binaries from the package manager

• Pre-compiled binaries from the Web

Page 45: Django Dev Environment Howto

Words of Warning

• Version mismatch

• CPU Architecture mismatch (Windows sucks)

• Security issue

• Why pip doesn't offer binary installing

Page 46: Django Dev Environment Howto

From APT

• apt-get install python-psycopg2

• What does it install?

• http://packages.debian.org

• .deb file is merely an ar archive

• ln -s everything into $ENV/lib/site-packages

Page 47: Django Dev Environment Howto

Pre-Built Installer

• http://www.lfd.uci.edu/~gohlke/pythonlibs/

• Simply a compressed archive (usually gzip)

• Viewable with 7-Zip or similar

• easy_install <installer_path>

• Use where to make sure

Page 48: Django Dev Environment Howto

Miscellaneous• http://rudix.org has pre-built packages for OS X

• I never used it, to be honest :p

• RPM packages can be converted with rpm2cpio and then extracted with cpio

• Actually you can use MinGW

• Why?

• If you really know what you're doing

Page 49: Django Dev Environment Howto

Questions?