diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..9aec5839e0b6bf719bd9fc104b0d67988d84ee09
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,34 @@
+from setuptools import setup
+import os
+import pathlib
+
+
+def read(rel_path):
+    """Function read() was copied from setup.py in Pip package."""
+    here = os.path.abspath(os.path.dirname(__file__))
+    # intentionally *not* adding an encoding option to open, See:
+    #   https://github.com/pypa/virtualenv/issues/201#issuecomment-3145690
+    with open(os.path.join(here, rel_path), "r") as fp:
+        return fp.read()
+
+
+setup(
+    name='prefactor3-cwl',
+    version='0.3.0',
+    url='https://git.astron.nl/eosc/prefactor3-cwl/',
+    description="Prefactor 3 pipeline (CWL version)",
+    long_description=read('README.md'),
+    platforms='any',
+    classifiers=['Programming Language :: Python :: 3',
+                 'Development Status :: 3 - Alpha',
+                 'Natural Language :: English',
+                 'Intended Audience :: Science/Research',
+                 'Operating System :: POSIX :: Linux',
+                 'Topic :: Scientific/Engineering :: Astronomy'],
+    install_requires=[
+        'prefactor@git+https://github.com/lofar-astron/prefactor.git'
+    ],
+    data_files=[(os.path.join('share', 'prefactor', dir),
+                 [str(p) for p in pathlib.Path(dir).glob('**/*.cwl')]) for dir in
+                ('lofar-cwl', 'steps', 'subworkflow', 'workflows')]
+)