DFFML currently only supports Python 3.7. If your distribution’s package manager doesn’t provide Python 3.7, pyenv is another good way to install it. You could also use the docker container.

DFFML is available via pip.

$ python3.7 -m pip install -U dffml[all]

The [all] suffix tells pip to install all of the core plugins. This includes the sklearn and tensorflow models, MySQL source, etc.

If you want to stay on the bleeding edge of bug fixes, etc. Install via git.

$ python3.7 -m pip install -U git+

If you want to install all of the machine learning model plugins that are maintained as a part of the core repository, you can append [models].

$ python3.7 -m pip install -U dffml[models]

There’s an online IDE based on Theia (similar to VS Code) called GitPod that gives you a setup development environment to get started working with/on DFFML right away. However, it comes with the master branch installed, you’ll need to run the above commands to get the lastest released version.


For Ubuntu 18.XX python3 means Python 3.6 so far as apt is concerend. However, python3-pip works for all 3.X versions. So you’ll need to install the following packages to get python3.7 with pip.

$ sudo apt-get update && sudo apt-get install -y python3.7 python3-pip


This is a good option if you don’t want to deal with installing Python 3.7.

$ docker pull intelotc/dffml

You can also build the container image yourself if you’d like.

$ docker build -t intelotc/dffml .

You can then make a bash function to run the dffml docker container.

dffml() {
  docker run --rm -ti \
    -v $HOME/.local:/home/$USER/.local/ \
    -v $HOME/.cache:/home/$USER/.cache/ \
    -v $PWD:/workdir -w /workdir \
    -e UID=$(id -u) -e USER=$USER \
    intelotc/dffml $@

This creates an alias that takes your current working directory and mounts it into /workdir as well as your $HOME/.local to the same in the container.

With the alias, you can run dffml commands as if you’d installed via pip.

$ dffml list

Keep in mind that if you’re working on files they can only be ones in your current working directory, and if you want to access network resources and they are on your host, you’ll have to talk to (docker0 inet address) instead of localhost or

The purpose of mounting $HOME/.local is so that if you want to pip install anything, you can, and it will persist between invocations due to that being on the host.

If you wan to run pip you can put it after dffml.

$ dffml pip install example