diff --git a/packages/py-ray/package.py b/packages/py-ray/package.py
index da6ae703cb6d4e6fd0a3b663efd0b9c2c92cc845..21e6bd228910065ae51bb563acc215491e7a431c 100644
--- a/packages/py-ray/package.py
+++ b/packages/py-ray/package.py
@@ -13,14 +13,37 @@ class PyRay(PythonPackage):
     homepage = "https://github.com/ray-project/ray"
     url = "https://github.com/ray-project/ray/archive/ray-0.8.7.tar.gz"
 
+    # begin EBRAINS (added): ECM new node-js -> new react whatever -> new py-ray
+    version("2.4.0", sha256="b0110a84630b2f6d10cd13e8ac955875c3658373eb6cabcc77cf316de3c28066")
+    # end EBRAINS
     version("2.0.1", sha256="b8b2f0a99d2ac4c001ff11c78b4521b217e2a02df95fb6270fd621412143f28b")
     version("0.8.7", sha256="2df328f1bcd3eeb4fa33119142ea0d669396f4ab2a3e78db90178757aa61534b")
 
     variant("default", default=False, description="Install default extras", when="@2.0.1")
 
+    # begin EBRAINS (added): ECM new node-js -> new react whatever -> new py-ray
+    conflicts("node-js@17:", when="@:2.0.1")
+    # end EBRAINS
+
+    # begin EBRAINS (added): ElM add missing dependencies/constraints for added version 2.4.0
+    depends_on("python@3.6:3.11", when="@2.4.0", type=("build", "run"))
+    depends_on("bazel@5", when="@2.4.0", type="build")
+    depends_on("py-cython@0.29.32:", when="@2.4.0", type="build")
+    depends_on("py-attrs", when="@2.4.0", type=("build", "run"))
+    depends_on("py-click@7.0:", when="@2.4.0", type=("build", "run"))
+    depends_on("py-grpcio@1.32:1.51.3", when="@2.4.0 ^python@:3.9", type=("build", "run"))
+    depends_on("py-grpcio@1.42:1.51.3", when="@2.4.0 ^python@3.10:", type=("build", "run"))
+    depends_on("py-protobuf@3.15.3:", when="@2.4.0", type=("build", "run"))
+    depends_on("py-frozenlist", when="@2.4.0", type=("build", "run"))
+    depends_on("py-typing-extensions", when="@2.4.0 ^python@:3.7", type=("build", "run"))
+    depends_on("py-virtualenv@20.0.24:", when="@2.4.0", type=("build", "run"))
+    # end EBRAINS
+
     depends_on("python@3.6:3.10", when="@2.0.1", type=("build", "run"))
     depends_on("python@3.6:3.8", when="@0.8.7", type=("build", "run"))
+    # begin EBRAINS (modified): ECM relax constraint to allow newer bazel
     depends_on("bazel@4.2.2:5", when="@2.0.1", type="build")
+    # end EBRAINS (modified)
     depends_on("bazel@3.2.0", when="@0.8.7", type="build")
     depends_on("npm", type="build")
     depends_on("py-setuptools", type="build")
@@ -45,11 +68,12 @@ class PyRay(PythonPackage):
     depends_on("py-typing-extensions", when="@2.0.1 ^python@:3.7", type=("build", "run"))
     depends_on("py-virtualenv", when="@2.0.1", type=("build", "run"))
 
-    # needed to fix import errors
+    # begin EBRAINS (added): ElM needed to fix import errors
     depends_on("py-setproctitle", type=("build", "run"))
     depends_on("py-colorama", type=("build", "run"))
     depends_on("py-psutil", type=("build", "run"))
-    
+    # end EBRAINS
+
     with when("+default"):
         depends_on("py-aiohttp@3.7:", type=("build", "run"))
         depends_on("py-aiohttp-cors", type=("build", "run"))
@@ -100,4 +124,4 @@ class PyRay(PythonPackage):
         with working_dir(join_path("python", "ray", "dashboard", "client")):
             npm = which("npm")
             npm("ci")
-            npm("run", "build")
\ No newline at end of file
+            npm("run", "build")