I've read over this question and I think that is a great start, but I'm looking for more insight.
I have written an application using Python 2.6 and Django 1.2.1. I would like to deploy this application on a system that does not have Python 2.6 or Django installed. The system itself doesn't have many things installed - sqlite3, pysqlite2, gcc, etc. The system does have Python 2.4.3, however.
What would be the most sane way to create RPMs of Python 2.6, Django, and my application itself (a standard Django app) so that each can be installed separately to allow for upgrades of different components?
I don't know much about creating source RPMs but I suspect that is information readily available. If there are any especially good resources for creating source RPMs, I would appreciate them too.
The system is ESX 4 Update 1, if it matters.
Thanks!
UPDATE: It also never occurred to me that distributing Python eggs or even using setup.py is a viable solution to content distribution. I would be interested in hearing about that too.
On top of all the normal issues encountered when packaging Python code, Django projects have a few other issues that need to be handled:
I had to solve these issues for packaging Transifex, and I recommend you investigate the various bits that have put in place in order to make it work:
/usr/share/<projectname>
execfile()
to load settings from /etc/<projectname>
Python packages are normally distributed with setuptools/distribute. Generally you can install every python package (and it's dependencies) with easy_install <package_name>
(optionally with a specific version number). I would recommend you to use setuptools as our primary distribution method, because:
A good resource for you to read is Deploying with Distribute. It focuses on Flask (another web framework), but simply replacing "Flask" with "Django" will do the trick :)
Another python tool which is great for distributing and deploying things is fabric, which you can use in addition to distribute (or without it, however you want). With fabric you can for example, bootstrap and install your application (inclusive dependencies) on N servers at once, manage several development, testing and production servers and update them all concurrently with a single command.
This article might help you to get started with Fabric: Deploying with Fabric
And additionally I would also recommend you to publish your repository (or mirror an existing one) on github or bitbucket for people who want to get the latest sources manually and install your application with python setup.py install
afterwards. The setup.py install script is part of distribute which I've mentioned before.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With