diff --git a/requirements.txt b/requirements.txt
index c0fa894a3551435e0cbba01cd944d343d7d5188d..478329c1387d5ec4e2ca7779f05b99b9c3010a70 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,17 +1,18 @@
-alembic~=1.14
+alembic==1.14.0
 # needed to support auto discovery of and applying enum changes
-alembic-postgresql-enum~=0.1
-click~=8.1
+alembic-postgresql-enum==0.4.0
+click==8.1.7
 jsonschema
-flask~=3.0
-flask-cors~=5.0
-flask-migrate~=4.0
-flask-sqlalchemy~=3.0
-openpyxl~=3.1
-psycopg2-binary~=2.9
-SQLAlchemy~=2.0
-authlib~=1.2
-flask-login~=0.6
+flask==3.1.0
+flask-cors==5.0.0
+flask-migrate==4.0.7
+flask-sqlalchemy==3.1.1
+openpyxl==3.1.5
+psycopg2-binary==2.9.10
+SQLAlchemy==2.0.36
+authlib==1.3.2
+flask-login==0.6.3
+validators==0.34.0
 requests
 
 pytest
diff --git a/setup.py b/setup.py
index f97dbcce4df700e31abe7057db242dd0a2716bfe..b129ae76f2502285bce9b2faa1c7db06b9af5fa5 100644
--- a/setup.py
+++ b/setup.py
@@ -10,20 +10,21 @@ setup(
     url='https://gitlab.geant.org/geant-swd/compendium-v2',
     packages=find_packages(),
     install_requires=[
-        'alembic~=1.14',
-        'alembic-postgresql-enum~=0.1',
-        'click~=8.1',
+        'alembic==1.14.0',
+        'alembic-postgresql-enum==0.4.0',
+        'click==8.1.7',
         'jsonschema',
-        'flask~=3.0',
-        'flask-cors~=5.0',
-        'flask-migrate~=4.0',
-        'flask-sqlalchemy~=3.0',
-        'openpyxl~=3.1',
-        'psycopg2-binary~=2.9',
-        'SQLAlchemy~=2.0',
+        'flask==3.1.0',
+        'flask-cors==5.0.0',
+        'flask-migrate==4.0.7',
+        'flask-sqlalchemy==3.1.1',
+        'openpyxl==3.1.5',
+        'psycopg2-binary==2.9.10',
+        'SQLAlchemy==2.0.36',
         'sentry-sdk[flask]',
-        'authlib~=1.2',
-        'flask-login~=0.6',
+        'authlib==1.3.2',
+        'flask-login==0.6.3',
+        'validators==0.34.0'
         'requests',
     ],
     include_package_data=True,