diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..f9bd1455b374de796e12d240c1211dee9829d97e
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+include requirements.txt
diff --git a/doc/doc-installation.md b/doc/doc-installation.md
index 9406abbaa56b4047d2dd32c51badb215a3f28391..fe2afa56c8ad6598d3368448e6f566c65cbdb5da 100644
--- a/doc/doc-installation.md
+++ b/doc/doc-installation.md
@@ -19,6 +19,12 @@ cd pyicon
 pip install -e .
 ``` 
 
+For a more complete installation that includes dependencies for testing, 
+debugging and compiling the documentation use:
+```
+pip install -e .[full]
+```
+
 ### On an arbitrary system
 
 pyicon is developed for python 3.8 or later. Other versions might work as well but are not supported so far.
@@ -37,6 +43,12 @@ cd pyicon
 pip install -e .
 ```
 
+For a more complete installation that includes dependencies for testing, 
+debugging and compiling the documentation use:
+```
+pip install -e .[full]
+```
+
 The above instructions will provide a minimum python environment that will be sufficient for most applications. 
 However, some more advanced features might require the installation of further python packages.
 For a complete list of python packages that is supposed to cover all aspects can be obtained from the latest 
diff --git a/pyicon/pyicon_plotting.py b/pyicon/pyicon_plotting.py
index 0dd734d0060dcf9ac842e74efa4db5b0b9cbe75c..ec1a84ef14b479618303c3805a7565dd0be986b8 100644
--- a/pyicon/pyicon_plotting.py
+++ b/pyicon/pyicon_plotting.py
@@ -15,7 +15,9 @@ import cartopy
 import cartopy.crs as ccrs
 from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
 import cmocean
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 #from importlib import reload
 from .pyicon_tb import write_dataarray_to_nc
 from .pyicon_tb import identify_grid
diff --git a/pyicon/pyicon_tb.py b/pyicon/pyicon_tb.py
index d58ded2363220c14fb306a656405924a740b6201..9b83c69d98324df1d9ec39ab3ae5482e872dfa5f 100644
--- a/pyicon/pyicon_tb.py
+++ b/pyicon/pyicon_tb.py
@@ -18,7 +18,9 @@ import matplotlib.pyplot as plt
 import matplotlib
 # --- debugging
 #print('mybreak')
-from ipdb import set_trace as mybreak  
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 #print('pnadas')
 import pandas as pd
 #print('xarray')
diff --git a/requirements.txt b/requirements.txt
index 4c83d1e66a079816df87bb982a6b0c4e4d64400d..86b73626b643e5e35eab498a7fe4292ec4c492ef 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,12 +6,10 @@ xarray
 pandas
 cmocean
 scipy
-ipdb
 ipywidgets
 ipykernel
 jupytext
 nbconvert
-pytest
 healpy
 cftime
 #cartopy         # cannot easily be installed with pip
diff --git a/requirements_development.txt b/requirements_development.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5778fd9b7a4034ebf690052b06c204951fd6dd8e
--- /dev/null
+++ b/requirements_development.txt
@@ -0,0 +1,2 @@
+ipdb
+pytest
\ No newline at end of file
diff --git a/scripts/pyic_fig.py b/scripts/pyic_fig.py
index 5ad9e7d88566d667d79c6770dde294542900138e..04d58373ce9323ee22771e89f5e9f5e8fb5be738 100755
--- a/scripts/pyic_fig.py
+++ b/scripts/pyic_fig.py
@@ -166,7 +166,9 @@ def main():
     import os
     import sys
     from pathlib import Path
-    from ipdb import set_trace as mybreak  
+    import importlib.util
+    if importlib.util.find_spec("ipdb"):
+      from ipdb import set_trace as mybreak
     #sys.path.append(f'{Path.home()}/pyicon/')
     import pyicon as pyic  
     print('Done loading modules.')
diff --git a/scripts/pyic_intake.py b/scripts/pyic_intake.py
index a3d2306557bd2f46052d13ad11b9d32a55f28925..749d2b8bb829aba8b89b8589b0f7f40d22a4c412 100755
--- a/scripts/pyic_intake.py
+++ b/scripts/pyic_intake.py
@@ -3,7 +3,9 @@ import os
 import glob
 import yaml
 import argparse
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 import sys
 from netCDF4 import Dataset
 import pandas as pd
diff --git a/scripts/pyic_sec.py b/scripts/pyic_sec.py
index 87c57d8e6aff54fb28f1afe178a7727f1d317303..58bd3d47fe919b6ddab6c0f64dfa0c52b042b692 100755
--- a/scripts/pyic_sec.py
+++ b/scripts/pyic_sec.py
@@ -147,6 +147,9 @@ def main():
     import sys
     from pathlib import Path
     from ipdb import set_trace as mybreak  
+    import importlib.util
+    if importlib.util.find_spec("ipdb"):
+      from ipdb import set_trace as mybreak
     #sys.path.append(f'{Path.home()}/pyicon/')
     import pyicon as pyic  
     print('Done loading modules.')
diff --git a/scripts/pyic_view.py b/scripts/pyic_view.py
index 3785dc51104acdbddd4f82018d932b9255b02d19..eb6db36ba0de1dbe4404e2800f6b6a11fa9a43c5 100755
--- a/scripts/pyic_view.py
+++ b/scripts/pyic_view.py
@@ -9,7 +9,9 @@ import pyicon as pyic
 import cartopy.crs as ccrs
 import glob
 from pyicon import params
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 import cmocean
 from pyproj import Proj, CRS, Transformer
 
diff --git a/setup.py b/setup.py
index 505b4f7f0817d7a0e2f0a778691e07cafac91a41..37b2e0fe54797e57ab2c11db1e56d18d64aee849 100644
--- a/setup.py
+++ b/setup.py
@@ -10,6 +10,12 @@ with open("README.md", "r", encoding="utf-8") as f:
 with open("requirements.txt") as f:
     install_requires = f.read().strip().split("\n")
 
+with open("requirements_documentation.txt") as f:
+    documentation_requires = f.read().strip().split("\n")
+
+with open("requirements_development.txt") as f:
+    development_requires = f.read().strip().split("\n")
+
 setup(
     name='pyicon-diagnostics',
     version=version,
@@ -20,7 +26,13 @@ setup(
     author='The pyicon development team',
     author_email='nils.brueggemann@mpimet.mpg.de',
     install_requires=install_requires,
+    extras_require={
+        "dev": development_requires,
+        "doc": documentation_requires,
+        "full": development_requires+documentation_requires,
+    },
     packages=find_packages(),
+    include_package_data=True,
     entry_points={
         'console_scripts': [
             'pyic_intake = scripts.pyic_intake:main',