1{
2 lib,
3 alembic,
4 buildPythonPackage,
5 click,
6 cloudpickle,
7 databricks-cli,
8 docker,
9 entrypoints,
10 fetchPypi,
11 flask,
12 gitpython,
13 gorilla,
14 graphene,
15 gunicorn,
16 importlib-metadata,
17 markdown,
18 matplotlib,
19 numpy,
20 packaging,
21 pandas,
22 prometheus-flask-exporter,
23 protobuf,
24 python-dateutil,
25 pythonOlder,
26 pythonRelaxDepsHook,
27 pyarrow,
28 pytz,
29 pyyaml,
30 querystring-parser,
31 requests,
32 setuptools,
33 scikit-learn,
34 scipy,
35 simplejson,
36 sqlalchemy,
37 sqlparse,
38}:
39
40buildPythonPackage rec {
41 pname = "mlflow";
42 version = "2.12.2";
43 pyproject = true;
44
45 disabled = pythonOlder "3.8";
46
47 src = fetchPypi {
48 inherit pname version;
49 hash = "sha256-1xLxr51E8eueG67oymT3MR4YW3Vy/DweCoOkyM7/aq0=";
50 };
51
52 # Remove currently broken dependency `shap`, a model explainability package.
53 # This seems quite unprincipled especially with tests not being enabled,
54 # but not mlflow has a 'skinny' install option which does not require `shap`.
55 nativeBuildInputs = [
56 pythonRelaxDepsHook
57 setuptools
58 ];
59 pythonRemoveDeps = [ "shap" ];
60 pythonRelaxDeps = [
61 "packaging"
62 "pytz"
63 "pyarrow"
64 ];
65
66 propagatedBuildInputs = [
67 alembic
68 click
69 cloudpickle
70 databricks-cli
71 docker
72 entrypoints
73 flask
74 gitpython
75 gorilla
76 graphene
77 gunicorn
78 importlib-metadata
79 markdown
80 matplotlib
81 numpy
82 packaging
83 pandas
84 prometheus-flask-exporter
85 protobuf
86 python-dateutil
87 pyarrow
88 pytz
89 pyyaml
90 querystring-parser
91 requests
92 scikit-learn
93 scipy
94 #shap
95 simplejson
96 sqlalchemy
97 sqlparse
98 ];
99
100 pythonImportsCheck = [ "mlflow" ];
101
102 # no tests in PyPI dist
103 # run into https://stackoverflow.com/questions/51203641/attributeerror-module-alembic-context-has-no-attribute-config
104 # also, tests use conda so can't run on NixOS without buildFHSEnv
105 doCheck = false;
106
107 meta = with lib; {
108 description = "Open source platform for the machine learning lifecycle";
109 mainProgram = "mlflow";
110 homepage = "https://github.com/mlflow/mlflow";
111 changelog = "https://github.com/mlflow/mlflow/blob/v${version}/CHANGELOG.md";
112 license = licenses.asl20;
113 maintainers = with maintainers; [ tbenst ];
114 };
115}