1. Open Web Platform Installer and install "Python project":


def application(environ, start_response):
    start_response('200 OK', [('Content-type','text/html'),])
    yield "<html><body>You requested <code>"
    yield environ.get('PATH_INFO')
    yield "</code></body></html>"


To deploy Python Tornado application you will need to install Python Hosting Package and Twisted on a target server. Then just copy IIS web site from one machine to another.

web.config example

<?xml version="1.0" encoding="UTF-8"?>
   <application name="" >
     <add name="PYTHONPATH" value="%APPL_PHYSICAL_PATH%;%APPL_PHYSICAL_PATH%\python_modules\Lib\site-packages;%PYTHONPATH%" /> 
     <add name="WSGI_APP" value="wsgi.application" />
     <add name="DEPLOY_FILE" value="" />
     <add name="DEPLOY_LOG" value="log\deploy.log" />
   <add name="" scriptProcessor="python.2.7.twisted"  
        path="*" verb="*" modules="HeliconZoo_x86" preCondition="bitness32" 
        resourceType="Unspecified" requireAccess="Script" />
   <add name="" scriptProcessor="python.2.7.twisted"  
        path="*" verb="*" modules="HeliconZoo_x64" preCondition="bitness64" 
        resourceType="Unspecified" requireAccess="Script" />

Environment variables

  • PYTHONPATH — path to Python modules. In the example it points to application root, the python_modules\Lib\site-packages subfolder and also includes value defined by user.
  • WSGI_APP — full path to the application’s entry point function.
  • WATCH_FILE_CHANGES_MASK — files to watch. Worker is restarted every time a file of specified type changes. In the example all .py files are watched. file example

Deploy file is used to execute commands, such as components installations or database migrations, on a server when the application initially starts or updated. The following code is only an example. We recommend you to use file that comes with the Python project template.

# This file is example of
# The file is executed once on the first request after every restart of IIS application.
# The file output is redirected to log file described in DEPLOG_LOG environment variable.

import sys
import os
import os.path

PROJECT_DIR = os.path.dirname(__file__)

PIP_EXE = os.path.join(os.path.dirname(sys.executable), 'scripts\\pip.exe')

# update APPDATA env for pip
os.environ['APPDATA'] = os.path.join(PROJECT_DIR, 'python_modules')

# install requirements to local folder
os.system('{0} install --install-option="--prefix={1}" --requirement=requirements.txt'.format(PIP_EXE, os.path.join(PROJECT_DIR, 'python_modules')))