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