Installation

Stable release

To install Questions, run this command in your terminal:

$ pip install questions

This is the preferred method to install Questions, as it will always install the most recent stable release.

If you are using Python 3.7 or earlier, you will need to install the typing-extensions package too. This is not required from Python 3.8 onwards.

$ pip install typing-extensions

If you don’t have pip installed, this Python installation guide can guide you through the process.

From sources

The sources for Questions can be downloaded from the Github repo.

You can either clone the public repository:

$ git clone git://github.com/cguardia/questions

Or download the tarball:

$ curl -OJL https://github.com/cguardia/questions/tarball/master

Once you have a copy of the source, you can install it with:

$ python setup.py install

Installing SurveyJS locally

Questions can be used without installing the SurveyJS Javascript resources, because by default it gets all resources from a CDN, but sometimes it’s necessary to install all resources locally. Questions does its best to make that as easy as possible.

The easiest way to install SurveyJS is to use npm. This is also the recommended way to go if your project will be using other JS modules. Simply add the SurveyJS module corresponding to your platform to the dependencies section in your package.json file:

  • survey-angular

  • survey-jquery

  • survey-knockout

  • survey-react

  • survey-vue

It’s also necessary to add the SurveyJS custom widgets (surveyjs-widgets), since they are included in Questions.

If you have npm available, but are not building a JS application and only want the SurveyJS resources, create a directory for static resources in your Python web application project, and do the following:

$ mkdir static
$ cd static
$ npm install survey-knockout
$ npm install surveyjs-widgets

These commands will download the complete set of resources for the selected platform. After they complete successfully, the files will be under ./static/node_modules/.

If npm is not available, or you can’t use it, Questions includes a command line script to download the required files. Make sure your virtual environment is activated (or use the full path to the bin directory) and run this command:

$ download_surveyjs path/to/static/dir {platform} {theme}

The platforms are:

  • angular

  • jquery

  • knockout

  • react

  • vue

The themes are:

  • default (legacy)

  • defaultV2

  • bootstrap (legacy)

  • modern

The default theme is named defaultV2. There is an older default theme that is now considered legacy. The old bootstrap theme is also legacy and deprecated. This command will download all the required resources to the directory specified. This is by far the simplest way to get running if you don’t plan to do any javascript development as part of your application.

Independently of the method you use to download the resources. You will need to set up your application to use the resulting resource directory. If all resources are present in the same directory, all that is needed is to pass in the URL for this directory when creating the form, like this:

form = Form(resource_url="/static/your/path")

If the resources are stored using npm or a different directory layout, it will be necessary to add the resource definitions to the HTML templates by hand. How to do this varies from framework to framework. In Flask, the following will work, assuming you are using the default static directory:

<script src="{{ url_for('static',
    filename='npm_modules/survey-knockout/survey.ko.min.js') }}">
</script>

<link rel="stylesheet" href="{{ url_for('static',
    filename='npm_modules/survey-knockout/survey.css') }}" />

Resources vary by platform, theme and types of questions used. To make sure you have all the required resources for your application, Questions includes a script to list them:

$ list_resources {platform} {theme}

This will list all required resources. Note that custom widgets, like Select2, require extra JS and CSS resources. To find out if the question types you are using depend on extra resources, add the ‘–include-widgets` flag to the command.