1{
2 lib,
3 attrs,
4 buildPythonPackage,
5 celery,
6 colorama,
7 configobj,
8 dulwich,
9 distro,
10 dpath,
11 dvc-azure,
12 dvc-data,
13 dvc-gdrive,
14 dvc-gs,
15 dvc-hdfs,
16 dvc-http,
17 dvc-oss,
18 dvc-render,
19 dvc-s3,
20 dvc-ssh,
21 dvc-studio-client,
22 dvc-task,
23 dvc-webdav,
24 dvc-webhdfs,
25 fetchFromGitHub,
26 flatten-dict,
27 flufl-lock,
28 fsspec,
29 funcy,
30 grandalf,
31 gto,
32 hydra-core,
33 importlib-metadata,
34 importlib-resources,
35 iterative-telemetry,
36 kombu,
37 networkx,
38 omegaconf,
39 packaging,
40 pathspec,
41 platformdirs,
42 psutil,
43 pydot,
44 pygtrie,
45 pyparsing,
46 pythonOlder,
47 requests,
48 rich,
49 ruamel-yaml,
50 scmrepo,
51 setuptools-scm,
52 shortuuid,
53 shtab,
54 tabulate,
55 tomlkit,
56 tqdm,
57 typing-extensions,
58 voluptuous,
59 zc-lockfile,
60 enableGoogle ? false,
61 enableAWS ? false,
62 enableAzure ? false,
63 enableSSH ? false,
64}:
65
66buildPythonPackage rec {
67 pname = "dvc";
68 version = "3.63.0";
69 pyproject = true;
70
71 disabled = pythonOlder "3.9";
72
73 src = fetchFromGitHub {
74 owner = "iterative";
75 repo = "dvc";
76 tag = version;
77 hash = "sha256-7wuxNPELHdxQSHKHQo8KTQ9yj8KW8RVEN0ykJN/he9E=";
78 };
79
80 pythonRelaxDeps = [
81 "dvc-data"
82 "platformdirs"
83 ];
84
85 postPatch = ''
86 substituteInPlace dvc/analytics.py \
87 --replace-fail 'enabled = not os.getenv(DVC_NO_ANALYTICS)' 'enabled = False'
88 substituteInPlace dvc/daemon.py \
89 --subst-var-by dvc "$out/bin/dcv"
90 '';
91
92 build-system = [ setuptools-scm ];
93
94 dependencies = [
95 attrs
96 celery
97 colorama
98 configobj
99 distro
100 dpath
101 dulwich
102 dvc-data
103 dvc-http
104 dvc-render
105 dvc-studio-client
106 dvc-task
107 flatten-dict
108 flufl-lock
109 fsspec
110 funcy
111 grandalf
112 gto
113 hydra-core
114 iterative-telemetry
115 kombu
116 networkx
117 omegaconf
118 packaging
119 pathspec
120 platformdirs
121 psutil
122 pydot
123 pygtrie
124 pyparsing
125 requests
126 rich
127 ruamel-yaml
128 scmrepo
129 shortuuid
130 shtab
131 tabulate
132 tomlkit
133 tqdm
134 typing-extensions
135 voluptuous
136 zc-lockfile
137 ]
138 ++ lib.optionals enableGoogle optional-dependencies.gs
139 ++ lib.optionals enableAWS optional-dependencies.s3
140 ++ lib.optionals enableAzure optional-dependencies.azure
141 ++ lib.optionals enableSSH optional-dependencies.ssh;
142
143 optional-dependencies = {
144 azure = [ dvc-azure ];
145 gdrive = [ dvc-gdrive ];
146 gs = [ dvc-gs ];
147 hdfs = [ dvc-hdfs ];
148 oss = [ dvc-oss ];
149 s3 = [ dvc-s3 ];
150 ssh = [ dvc-ssh ];
151 ssh_gssapi = [ dvc-ssh ] ++ dvc-ssh.optional-dependencies.gssapi;
152 webdav = [ dvc-webdav ];
153 webhdfs = [ dvc-webhdfs ];
154 webhdfs_kerberos = [ dvc-webhdfs ] ++ dvc-webhdfs.optional-dependencies.kerberos;
155 };
156
157 # Tests require access to real cloud services
158 doCheck = false;
159
160 pythonImportsCheck = [
161 "dvc"
162 "dvc.api"
163 ];
164
165 meta = with lib; {
166 description = "Version Control System for Machine Learning Projects";
167 homepage = "https://dvc.org";
168 changelog = "https://github.com/iterative/dvc/releases/tag/${src.tag}";
169 license = licenses.asl20;
170 maintainers = with maintainers; [
171 cmcdragonkai
172 fab
173 ];
174 mainProgram = "dvc";
175 };
176}