diff --git a/README.md b/README.md
index 737d3970a109f1540e6012de95467fa2622adb89..15bcf887087c40cfd57d844bae4e2009f7b1c8b0 100644
--- a/README.md
+++ b/README.md
@@ -72,9 +72,11 @@ mosquitto (mosquitto_passwd utility)
 docker
 PyInquirer
 pyyaml
+bcrypt
+pip-tools
 ```
 
-All python requirements are installable using `pip install -r requirements.txt` pointing to the requirements.txt file in this repo.
+All python requirements managed using `pip-tool` in the `requirements.in` file. The command `pip-compile`  generates a `requirements.txt` file that  can be used with with `pip install -r requirements.txt`  to install all needed python dependencies, updating the `requirements.txt` file can be done using `pip-compile` again. In an virtual environment `pip-sync` can be used instead of pip install to install needed packages.
 
 ### Config file generation
 
diff --git a/requirements.in b/requirements.in
new file mode 100644
index 0000000000000000000000000000000000000000..4c96d3a3fec7f96daec318fad045ba3bb82af38a
--- /dev/null
+++ b/requirements.in
@@ -0,0 +1,4 @@
+docker
+PyInquirer
+pyyaml
+bcrypt
diff --git a/requirements.txt b/requirements.txt
index 1e1c91132747a367edd34fb0719235a1fc833a13..10a1e33eaef5abc8dcd3198c2e351d96e77c6917 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,15 +1,24 @@
-certifi==2018.11.29
-chardet==3.0.4
+#
+# This file is autogenerated by pip-compile
+# To update, run:
+#
+#    pip-compile --output-file requirements.txt requirements.in
+#
+bcrypt==3.1.6
+certifi==2018.11.29       # via requests
+cffi==1.11.5              # via bcrypt
+chardet==3.0.4            # via requests
+docker-pycreds==0.4.0     # via docker
 docker==3.6.0
-docker-pycreds==0.4.0
-idna==2.7
-prompt-toolkit==1.0.14
-Pygments==2.3.1
-PyInquirer==1.0.3
-PyYAML==3.13
-regex==2018.11.22
-requests==2.20.1
-six==1.11.0
-urllib3==1.24.1
-wcwidth==0.1.7
-websocket-client==0.54.0
+idna==2.7                 # via requests
+prompt_toolkit==1.0.14    # via pyinquirer
+pycparser==2.19           # via cffi
+pygments==2.3.1           # via pyinquirer
+pyinquirer==1.0.3
+pyyaml==3.13
+regex==2018.11.22         # via pyinquirer
+requests==2.20.1          # via docker
+six==1.11.0               # via bcrypt, docker, docker-pycreds, prompt-toolkit, websocket-client
+urllib3==1.24.1           # via requests
+wcwidth==0.1.7            # via prompt-toolkit
+websocket-client==0.54.0  # via docker