1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 pythonOlder,
6 pythonAtLeast,
7 python,
8 fetchPypi,
9 autoPatchelfHook,
10
11 # dependencies
12 click,
13 filelock,
14 jsonschema,
15 msgpack,
16 packaging,
17 protobuf,
18 pyyaml,
19 requests,
20 watchfiles,
21
22 # optional-dependencies
23 # cgraph
24 cupy,
25 # client
26 grpcio,
27 # data
28 fsspec,
29 numpy,
30 pandas,
31 pyarrow,
32 # default
33 aiohttp,
34 aiohttp-cors,
35 colorful,
36 opencensus,
37 prometheus-client,
38 pydantic,
39 py-spy,
40 smart-open,
41 virtualenv,
42 # observability
43 memray,
44 opentelemetry-api,
45 opentelemetry-sdk,
46 opentelemetry-exporter-otlp,
47 # rllib
48 dm-tree,
49 gymnasium,
50 lz4,
51 # ormsgpack,
52 scipy,
53 typer,
54 rich,
55 # serve
56 fastapi,
57 starlette,
58 uvicorn,
59 # serve-grpc
60 pyopenssl,
61 # tune
62 tensorboardx,
63}:
64
65let
66 pname = "ray";
67 version = "2.50.0";
68in
69buildPythonPackage rec {
70 inherit pname version;
71 format = "wheel";
72
73 disabled = pythonOlder "3.9" || pythonAtLeast "3.14";
74
75 src =
76 let
77 pyShortVersion = "cp${builtins.replaceStrings [ "." ] [ "" ] python.pythonVersion}";
78 platforms = {
79 aarch64-darwin = "macosx_12_0_arm64";
80 aarch64-linux = "manylinux2014_aarch64";
81 x86_64-linux = "manylinux2014_x86_64";
82 };
83 # ./pkgs/development/python-modules/ray/prefetch.sh
84 # Results are in ./ray-hashes.nix
85 hashes = {
86 x86_64-linux = {
87 cp310 = "sha256-yDG/+6D28N+iW2XFuAACLHI0y+wbmKjt4X+XzIJfcA0=";
88 cp311 = "sha256-A7Zfzo7eJuKlI2XyCWfAmzo16dfSuFZkXcxoBDWkfkM=";
89 cp312 = "sha256-IUoAZIlBnHhnFcsqgbPFLIjgjqMpX0i6l6tpuIjY+Bg=";
90 cp313 = "sha256-g40spgZcElW2xw8dIEHKC2qzq6uQgzA7ZdezE4wCLeI=";
91 };
92 aarch64-linux = {
93 cp310 = "sha256-AGKn+lY/QkZlsc3sD+6ccHCNqAfsxZFsSZJaIUOIl9A=";
94 cp311 = "sha256-sTkjnzAUDpgve8X7HMJpSKCnbJgOujce/d4/sEXQp+Q=";
95 cp312 = "sha256-z94CocsRRIF1ir/kC0uMMa/hmRUIhzciUUZiVnVpEcs=";
96 cp313 = "sha256-E1xwySvTwwUEQckFV26HG4edykhmSSGMRSQaPsRXI5k=";
97 };
98 aarch64-darwin = {
99 cp310 = "sha256-sWTWr0IMejioMj+P83iLjFfO9GebNIg1ShI3GqwBh04=";
100 cp311 = "sha256-YZsua4gNWvEm3x382qJzFO3UPSxtYxXgHR4xGDmr/+Q=";
101 cp312 = "sha256-5oOYG1H/U0wJpIs6W2X8YYht49qKroc4I5WR2rK2fOU=";
102 cp313 = "sha256-w9qWaV4/Y70O7K1tMOx89tAwmoc44xrCcJV4ErzBzYs=";
103 };
104 };
105 in
106 fetchPypi {
107 inherit pname version format;
108 dist = pyShortVersion;
109 python = pyShortVersion;
110 abi = pyShortVersion;
111 platform = platforms.${stdenv.hostPlatform.system} or { };
112 sha256 = hashes.${stdenv.hostPlatform.system}.${pyShortVersion} or { };
113 };
114
115 nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [
116 autoPatchelfHook
117 ];
118
119 dependencies = [
120 click
121 filelock
122 jsonschema
123 msgpack
124 packaging
125 protobuf
126 pyyaml
127 requests
128 watchfiles
129 ];
130
131 optional-dependencies = lib.fix (self: {
132 adag = self.cgraph;
133 air = lib.unique (self.data ++ self.serve ++ self.tune ++ self.train);
134 all = lib.unique (
135 self.adag
136 ++ self.air
137 ++ self.cgraph
138 ++ self.client
139 ++ self.data
140 ++ self.default
141 ++ self.observability
142 ++ self.rllib
143 ++ self.serve
144 ++ self.train
145 ++ self.tune
146 );
147 cgraph = [
148 cupy
149 ];
150 client = [ grpcio ];
151 data = [
152 fsspec
153 numpy
154 pandas
155 pyarrow
156 ];
157 default = [
158 aiohttp
159 aiohttp-cors
160 colorful
161 grpcio
162 opencensus
163 prometheus-client
164 pydantic
165 py-spy
166 requests
167 smart-open
168 virtualenv
169 ];
170 observability = [
171 memray
172 opentelemetry-api
173 opentelemetry-sdk
174 opentelemetry-exporter-otlp
175 ];
176 rllib = [
177 dm-tree
178 gymnasium
179 lz4
180 # ormsgpack
181 pyyaml
182 scipy
183 typer
184 rich
185 ];
186 serve = lib.unique (
187 [
188 fastapi
189 requests
190 starlette
191 uvicorn
192 watchfiles
193 ]
194 ++ self.default
195 );
196 serve-grpc = lib.unique (
197 [
198 grpcio
199 pyopenssl
200 ]
201 ++ self.serve
202 );
203 train = self.tune;
204 tune = [
205 fsspec
206 pandas
207 pyarrow
208 requests
209 tensorboardx
210 ];
211 });
212
213 postInstall = ''
214 chmod +x $out/${python.sitePackages}/ray/core/src/ray/{gcs/gcs_server,raylet/raylet}
215 '';
216
217 pythonImportsCheck = [ "ray" ];
218
219 meta = {
220 description = "Unified framework for scaling AI and Python applications";
221 homepage = "https://github.com/ray-project/ray";
222 changelog = "https://github.com/ray-project/ray/releases/tag/ray-${version}";
223 license = lib.licenses.asl20;
224 maintainers = with lib.maintainers; [ billhuang ];
225 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
226 platforms = [
227 "aarch64-darwin"
228 "aarch64-linux"
229 "x86_64-linux"
230 ];
231 };
232}