For a typical server production deployment, we recommend installing Prestans via PyPI:
$ sudo pip install prestans
this will build and install Prestans for your default Python interpreter. To keep up-to-date; use the
$ sudo pip install prestans --upgrade
If you need to run multiple versions of Prestans on a server, consider using Virtualenv.
Prestans 2.0 is backwards incompatible. 1.x is still available for download, upgrading to 2.x will break your 1.x application.
Alternatively you can download and build Prestans using distutils:
$ tar -zxvf prestans-2.x.x.tgz $ cd prestans-2.x.x $ sudo python setup.py install
Environments like Google's AppEngine require you to include custom packages as part of your source. Things to consider when distributing Prestans with your application:
- Make sure you target a particular release of prestans, distributing our development branch is not recommended (unless of course you require a bleeding edge feature).
- If you prefer to include Prestans as a Git submodule, ensure you use reference one of the
- If your server environment has hard limits on number of files, consider using zipimport.
As a Git submodule:
$ git submodule add https://github.com/anomaly/prestans.git ext/prestans
When including Prestans manually ensure that your web server is able to locate the files.
The server side requires a WSGI compliant environment:
- Python 2.7
- WSGI compliant server environment (Apache + mod_wsgi, or Google AppEngine, etc).
- WebOb 1.2.3 (if you're using PyPI this should be installed as a dependency, AppEngine already provides WebOb)
- Your choice of a persistent store might require you to install SQLAlchemy or AppEngine Datastore.
The following are environment specific deployment gotchas. Things we've learnt the hard way. We'll ensure to constantly keep updating this section as we find more, we also encourage you to keep a eye out on our mailing lists.
Apache + mod_wsgi
Consider the following directory stucture, you might wish to checkout a bleeding edge Prestans into a source controlled directory (in this instance Git):
+-- app +-- conf +-- static +-- ext +-- prestans +-- client +-- conf project.pth
mod_wsgi's WSGIPythonPath directive tells mod_wsgi to add any locations delclared in files with the
.pth extension to the runtime Python path. This allows you to put Python modules in a directory e.g
ext and distribute it with your project.
Python projects under AppEngine use a YAML configuration file called app.yaml to specify versions of Python libraries you project requires. Ensure that you have one of the following included in your app.yaml file.
libraries: - name: webob version: latest
libraries: - name: webob version: "1.2.3"
Leaving this directive out loads version 1.1 of WebOb; Prestans 2.0 onwards specifically uses WebOb 1.2.3+.
Prestans ships a unit testing suite, due to the nature of the project only the following can be reliably unit tested:
- Prestans Data Type validation
to run the testsuite checkout Prestans via Git and use the Python unitest framework:
python -m unitest prestans.testsuite