The process of creating Python actions is similar to that of other actions. The following sections guide you through creating and invoking a single Python action, and demonstrate how to bundle multiple Python files and third party dependencies.
An example action Python action is simply a top-level function. For example, create a file called hello.py
with the following source code:
def main(args): name = args.get("name", "stranger") greeting = "Hello " + name + "!" print(greeting) return {"greeting": greeting}
Python actions always consume a dictionary and produce a dictionary. The entry method for the action is main
by default but may be specified explicitly when creating the action with the wsk
CLI using --main
, as with any other action type.
You can create an OpenWhisk action called helloPython
from this function as follows:
wsk action create helloPython hello.py
The CLI automatically infers the type of the action from the source file extension. For .py
source files, the action runs using a Python 3.6 runtime.
Action invocation is the same for Python actions as it is for any other actions:
wsk action invoke --result helloPython --param name World
{ "greeting": "Hello World!" }
Find out more about parameters in the Working with parameters section.
You can package a Python action and dependent modules in a zip file. The filename of the source file containing the entry point (e.g., main
) must be __main__.py
. For example, to create an action with a helper module called helper.py
, first create an archive containing your source files:
zip -r helloPython.zip __main__.py helper.py
and then create the action:
wsk action create helloPython --kind python:3 helloPython.zip
Another way of packaging Python dependencies is using a virtual environment (virtualenv
). This allows you to link additional packages that may be installed via pip
for example. To ensure compatibility with the OpenWhisk container, package installations inside a virtualenv must be done in the target environment. So the docker image openwhisk/python3action
should be used to create a virtualenv directory for your action.
As with basic zip file support, the name of the source file containing the main entry point must be __main__.py
. In addition, the virtualenv directory must be named virtualenv
. Below is an example scenario for installing dependencies, packaging them in a virtualenv, and creating a compatible OpenWhisk action.
requirements.txt
file that contains the pip
modules and versions to install, run the following to install the dependencies and create a virtualenv using a compatible Docker image:docker run --rm -v "$PWD:/tmp" openwhisk/python3action bash \ -c "cd tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"
zip -r helloPython.zip virtualenv __main__.py
wsk action create helloPython --kind python:3 helloPython.zip
Python 3 actions are executed using Python 3.6.1. This is the default runtime for Python actions, unless you specify the --kind
flag when creating or updating an action. The following packages are available for use by Python actions, in addition to the Python 3.6 standard libraries.