diff --git a/.gitignore b/.gitignore
index bdb35c401df041bb919c86f9f3d6e79917a227e0..f4e5f1262180fde66561ab74ee73e45c0ec5f502 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ db/ruian
 db/skoly
 instance
 venv
+osmo.egg-info
diff --git a/README.md b/README.md
index e6dee904f344d69a304831c6904e9e6317e7d3df..ea542f28563d9807937fc6ea8816cb79b80db128 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,8 @@
 # Odevzdávací Systém Matematické Olympiády
 
+## Instalace vývojového prostředí
+
+python3 -m venv venv
+. venv/bin/activate
+pip install wheel
+pip install -e .
diff --git a/TODO b/TODO
index 2a206f855f7677ed2a1c03a9364ca14a766f12ee..0b167b43a90acc952f5a791fcec027b29b3286c1 100644
--- a/TODO
+++ b/TODO
@@ -3,6 +3,7 @@
 - uklidit v logování (jak do DB, tak do app.logger)
 - na import by bylo hezké mít testy
 - ostylovat login form
+- GDPR
 
 - export:
 	- lidská jména stavů
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 690d653829ef49e4bc7e28bbb4c2f6f1bfb167c7..0000000000000000000000000000000000000000
--- a/requirements.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Flask
-Flask-WTF
-WTForms
-blinker
-click
-dateutils
-psycopg2
-sqlalchemy
-sqlacodegen
-bcrypt
-flask_sqlalchemy
-flask_bootstrap
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..b24c89441d7540ec3aa1690e9221bc08ba4d4588
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+
+import setuptools
+
+setuptools.setup(
+    name='osmo',
+    version='0.1',
+    description='Odevzdávací systém Matematické olympiády',
+    packages=['mo'],
+    install_requires=[
+        'Flask',
+        'Flask',
+        'Flask-WTF',
+        'WTForms',
+        'blinker',
+        'click',
+        'dateutils',
+        'psycopg2',
+        'sqlalchemy',
+        'sqlacodegen',
+        'bcrypt',
+        'flask_sqlalchemy',
+        'flask_bootstrap',
+    ],
+)