Conference Schedule

Track one or two? Eeenie, meenie, miney, moe…

log in to bookmark.

Django Package Thunderdome: Is Your Package Worthy?

A Talk presented by Audrey Roy, Daniel Greenfeld


Wednesday, September 7th 11:20 a.m.–noon




What makes a package useful? What is it about certain packages that makes them must-haves for any project? I’ll go over topics like: purpose, structure, docs, tests, availability on PyPI and Github/Bitbucket, activity, and more. I will visit some of the most useful grids on and highlight my top package picks, showing examples of what makes these top packages so great.


What makes a Django package usable? (10 min)

  • Purpose
  • Structure
  • Docs
  • Tests
  • Community
  • Modularity (pluggability)
  • Availability on PyPI
  • Availability on Github/Bitbucket
  • Activity
  • Code quality

Package evaluations (25 min)

  • Go to a Django Packages grid
  • Drill down into doc/code examples from winning packages to show what makes them so usable

Making your favorite project get onto my favorites list (5 min)

Here's a rough outline of what we have in mind:

Points of comparison:

  1. Purpose
    1. To paraphrase James Bennett, the smaller the scope and greater the focus of your app, the better it will be. Application logic can be tighter and patching/replacing the app is easier.
    2. The package addresses a real need.
  2. Structure
  3. Docs
    1. No docs means your app fails. I won't even look at it.
    2. Doc strings do not suffice as documentation.
    3. Bonus points awarded for using for documentation hosting.
    4. If there are dependencies, you must make the requirements clear.
    5. The installation steps should be bulletproof. I should be able to follow your install docs and have the package just work.
  4. Tests
    1. No tests means it is hard to do Python/Django/Dependency upgrades
    2. No tests means the the code is unpredictable.
  5. Community
    1. When was the last contribution?
    2. How many people are contributing?
    3. Who is contributing?
    4. Attribution of authors: every author and contributor should be credited. This shows that you're willing to go the extra mile for your package.
  6. Modularity (pluggability)
    1. Installation should be minimally invasive to the rest of your project.
    2. Do not confuse pluggability with over-engineering for every generic use case.
    3. Within your app, sub-modularity is great, e.g. different registration backends for django-registration
  7. Availability on PyPI
    1. Give your package proper version numbers and always have the latest release available on PyPI.
  8. Version Control Hosting
    1. If you aren't on Github or Bitbucket you don't exist. Nothing else has the visibility for Django developers.
    2. Launchpad and SourceForge are much less popular
    3. Google Project Hosting lacks an API, so no metrics can be gathered.
  9. Code quality / Best practices
    1. Code follows PEP-8?
    2. Tries not to have too many variables set in
    3. Easy to plug in, INSTALLED_APPS = ‘foo’ preferred.
    4. Naming of your app: should be django-something, should be descriptive


  • Fundamentals that every project needs
  • Registration
  • Profiles
  • Blogs
  • Tagging
  • REST
  • Database migrations

Take-home bonus:

A sheet of useful packages recommended by Django developers whose opinions we respect deeply.