Here’s why I like Django better than Pyramid or Rails.

As part of my day job I get to see a lot of different web frameworks. I also get to see all of their dependencies, requirements, and craziness when building stand-alone installers for them. Some of the frameworks I see have a ridiculous amount of dependencies. Django is so delightfully simple to install and run. Here’s the install_requires from Django’s setup.py:

Z0FL:Django-1.4 klynton$ grep "install_requires" setup.py
Z0FL:Django-1.4 klynton$

None. The only thing you have to have is Python.

Here’s the list of install_requires from Pyramid:

install_requires=[
    'setuptools',
    'Chameleon >= 1.2.3',
    'Mako >= 0.3.6', # strict_undefined
    'WebOb >= 1.2dev', # response.text / py3 compat
    'repoze.lru >= 0.4', # py3 compat
    'zope.interface >= 3.8.0',  # has zope.interface.registry
    'zope.deprecation >= 3.5.0', # py3 compat
    'venusian >= 1.0a3', # ``ignore``
    'translationstring >= 0.4', # py3 compat
    'PasteDeploy >= 1.5.0', # py3 compat
    ]

tests_require = [
    'WebTest >= 1.3.1', # py3 compat
    'virtualenv',
    ]

if not PY3:
    tests_require.extend([
        'Sphinx',
        'docutils',
        'repoze.sphinx.autointerface',
        'zope.component>=3.11.0',
        ])

testing_extras = tests_require + ['nose', 'coverage']

Rails is even worse, here are all of the dependencies required to install Rails 3.2.1:

i18n-0.6.0.gem
multi_json-1.0.4.gem
activesupport-3.2.1.gem
builder-3.0.0.gem
activemodel-3.2.1.gem
rack-1.4.1.gem
rack-cache-1.1.gem
rack-test-0.6.1.gem
journey-1.0.1.gem
hike-1.2.1.gem
tilt-1.3.3.gem
sprockets-2.1.2.gem
erubis-2.7.0.gem
actionpack-3.2.1.gem
arel-3.0.0.gem
tzinfo-0.3.31.gem
activerecord-3.2.1.gem
activeresource-3.2.1.gem
mime-types-1.17.2.gem
polyglot-0.3.3.gem
treetop-1.4.10.gem
mail-2.4.1.gem
actionmailer-3.2.1.gem
thor-0.14.6.gem
rack-ssl-1.3.2.gem
rdoc-3.9.4.gem
railties-3.2.1.gem
bundler-1.0.22.gem
rails-3.2.1.gem

Oh, and these have to be installed in this order or the gem dependencies will fail causing the process to exit, this doesn’t include the Ruby version required to run this version of Rails. Why are you installing gems or python packages manually you may ask, here’s why: AVAILABILITY.

I know who owns my availability and it sure isn’t rubygems.org or Pypi (lmao if you trust the uptime of either) or anyone else but me.

Building an installer for Django only requires the Django-${VERSION}.tar.gz file, it doesn’t require any of the nonsense that Pyramid or Rails does.