From 52e4c77ec1074148737f12687246d1c359237fed Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 25 Nov 2024 19:06:24 +0200 Subject: [PATCH 1/7] 2.17.2 --- recipe/meta.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index ec437aa..1be0f67 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set name = "mlflow" %} -{% set version = "2.16.2" %} +{% set version = "2.17.2" %} # MLFlow offers two variants, a "normal" install and a "skinny" install with # a reduced installation and fewer dependencies. The skinny installation is obtained @@ -23,7 +23,7 @@ package: source: # Using github as source for mlflow-skinny which does not exist on PyPI url: https://github.com/mlflow/mlflow/archive/refs/tags/v{{ version }}.zip - sha256: d101bf639b7671408d67d357f4af207e8655a41d50ca3befa951026d49751e39 + sha256: 84c6cad59877f1de177175ef619c0e0d6fe3e617b060cc75fbd2696b9e50e380 build: number: 0 From 6d5c0a8696262153b7d5a50768671a4fdf5c2593 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 26 Nov 2024 10:23:47 +0200 Subject: [PATCH 2/7] 2.18.0 --- recipe/meta.yaml | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 1be0f67..2f1d883 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set name = "mlflow" %} -{% set version = "2.17.2" %} +{% set version = "2.18.0" %} # MLFlow offers two variants, a "normal" install and a "skinny" install with # a reduced installation and fewer dependencies. The skinny installation is obtained @@ -23,13 +23,11 @@ package: source: # Using github as source for mlflow-skinny which does not exist on PyPI url: https://github.com/mlflow/mlflow/archive/refs/tags/v{{ version }}.zip - sha256: 84c6cad59877f1de177175ef619c0e0d6fe3e617b060cc75fbd2696b9e50e380 + sha256: 910ad1e2fce93b412063637d465e9291c99678a3bbccbf2b4f7736887321f44b build: number: 0 - entry_points: - - mlflow=mlflow.cli:cli - skip: true # [py<38 or s390x] + skip: true # [py<39 or s390x] script: | {% if mlflow_variant == "skinny" %} export MLFLOW_SKINNY=1 # [not win] @@ -44,6 +42,8 @@ build: cp orig_pyproject.toml pyproject.toml # [not win] copy orig_pyproject.toml pyproject.toml # [win] {% endif %} + entry_points: + - mlflow=mlflow.cli:cli requirements: host: @@ -80,7 +80,7 @@ requirements: - matplotlib-base <4 - numpy <3 - pandas <3 - - pyarrow <18,>=4.0.0 + - pyarrow <19,>=4.0.0 - scikit-learn <2 - scipy <2 - sqlalchemy >=1.4.0,<3 @@ -88,10 +88,12 @@ requirements: {% endif %} run_constrained: - mlflow{{ mlflow_other }} <0a0 + # extras - google-cloud-storage >=1.30.0 - azureml-core >=1.2.0 - - mlserver >=1.2.0, !=1.3.1, <1.4.0 - - mlserver-mlflow >=1.2.0,!=1.3.1,<1.4.0 + # mlserver + - mlserver >=1.2.0, !=1.3.1 + - mlserver-mlflow >=1.2.0,!=1.3.1 # mlflow-gateway, mlflow-skinny-gateway, genai - pydantic >=1.0,<3 - fastapi <1 @@ -105,6 +107,8 @@ requirements: - azure-storage-file-datalake >12 - google-cloud-storage >=1.30.0 - boto3 >1 + # langchain + - langchain >=0.1.0,<=0.3.7 test: imports: @@ -125,20 +129,28 @@ test: {% endif %} source_files: - tests/artifacts + requires: + - pip + - pytest + - pillow + - numpy commands: - mlflow --help + - mlflow --version - pip check # these tests come from the conda-forge recipe {% if mlflow_variant != "skinny" %} - mlflow recipes --help # This should not be packaged - - test ! -f $SP_DIR/pylint_plugins # [unix] + - test ! -f $SP_DIR/pylint_plugins # [unix] + - echo "Checking 'mlflow' exists..." # [unix] - pip list | grep "mlflow \+${PKG_VERSION}" # [unix] # smoke tests # skip test_log_artifact_windows_path_with_hostname (run only for win) # because needs a data file - pytest -vv tests/artifacts -k "not test_log_artifact_windows_path_with_hostname" {% else %} + - echo "Checking 'mlflow-skinny' exists..." # [unix] - pip list | grep "mlflow-skinny \+${PKG_VERSION}" # [unix] # smoke tests # skip test_load_image because numpy is not included in the skinny variant @@ -148,11 +160,6 @@ test: {% endif %} # test from .github/workflows/test-package-build.yml#L97 - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" - requires: - - pip - - pytest - - pillow - - numpy about: home: https://mlflow.org From 0f1eb9d2bd5a181f0e55212f09cf2cb63cd95a92 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 26 Nov 2024 11:15:08 +0200 Subject: [PATCH 3/7] Fix indenation --- recipe/conda_build_config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml index 30ba264..8db4b96 100644 --- a/recipe/conda_build_config.yaml +++ b/recipe/conda_build_config.yaml @@ -1,3 +1,3 @@ mlflow_variant: - - default - - skinny + - default + - skinny From 38c3a037cb119f09ecfd3b367ee4499d1458c2db Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 26 Nov 2024 12:09:52 +0200 Subject: [PATCH 4/7] Rewrite jinja2 set variable --- recipe/meta.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 2f1d883..6a8038f 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -10,10 +10,10 @@ {% if mlflow_variant == "skinny" %} {% set mlflow_suffix = "-skinny" %} -{% set mlflow_other = "" %} +{% set mlflow_other = "mlflow" %} {% else %} {% set mlflow_suffix = "" %} -{% set mlflow_other = "-skinny" %} +{% set mlflow_other = "mlflow-skinny" %} {% endif %} package: @@ -37,7 +37,7 @@ build: cp {{ SRC_DIR }}/pyproject.skinny.toml pyproject.toml # [not win] copy {{ SRC_DIR }}\pyproject.skinny.toml pyproject.toml # [win] {% endif %} - {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --ignore-installed --no-cache-dir -vvv + {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --ignore-installed --no-cache-dir -vv {% if mlflow_variant == "skinny" %} cp orig_pyproject.toml pyproject.toml # [not win] copy orig_pyproject.toml pyproject.toml # [win] @@ -87,7 +87,7 @@ requirements: - waitress <4 # [win] {% endif %} run_constrained: - - mlflow{{ mlflow_other }} <0a0 + - {{ mlflow_other }} <0a0 # extras - google-cloud-storage >=1.30.0 - azureml-core >=1.2.0 From a687c4392a1eacf53f5e7e37a8821f34a6bc1637 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 26 Nov 2024 13:10:15 +0200 Subject: [PATCH 5/7] Split the recipe --- recipe/README_SKINNY.rst | 15 ++ recipe/build-mlflow.bat | 38 +++++ recipe/build-mlflow.sh | 30 ++++ recipe/meta.yaml | 326 +++++++++++++++++++-------------------- 4 files changed, 241 insertions(+), 168 deletions(-) create mode 100644 recipe/README_SKINNY.rst create mode 100644 recipe/build-mlflow.bat create mode 100644 recipe/build-mlflow.sh diff --git a/recipe/README_SKINNY.rst b/recipe/README_SKINNY.rst new file mode 100644 index 0000000..8d7f634 --- /dev/null +++ b/recipe/README_SKINNY.rst @@ -0,0 +1,15 @@ +======================================================================= +MLflow Skinny: A Lightweight Machine Learning Lifecycle Platform Client +======================================================================= + +MLflow Skinny is a lightweight MLflow package without SQL storage, server, UI, or data science dependencies. +MLflow Skinny supports: + +* Tracking operations (logging / loading / searching params, metrics, tags + logging / loading artifacts) +* Model registration, search, artifact loading, and transitions +* Execution of GitHub projects within notebook & against a remote target. + +Additional dependencies can be installed to leverage the full feature set of MLflow. For example: + +* To use the `mlflow.sklearn` component of MLflow Models, install `scikit-learn`, `numpy`, and `pandas`. +* To use SQL-based metadata storage, install `sqlalchemy`, `alembic`, and `sqlparse`. diff --git a/recipe/build-mlflow.bat b/recipe/build-mlflow.bat new file mode 100644 index 0000000..4a96061 --- /dev/null +++ b/recipe/build-mlflow.bat @@ -0,0 +1,38 @@ +@echo on + +if not exist pyproject-full.toml ( + copy pyproject.toml pyproject.full.toml +) + +if [%PKG_NAME%] == [mlflow-skinny] ( + set MLFLOW_SKINNY=1 + # https://github.com/mlflow/mlflow/pull/4134 + copy %RECIPE_DIR%/README_SKINNY.rst %SRC_DIR% + copy pyproject.skinny.toml pyproject.toml +) else ( + copy pyproject.full.toml pyproject.toml +) + +if [%PKG_NAME%] == [mlflow-ui] ( + pushd mlflow\server\js + + @rem The lockfile is not installable in an immutable fashion on Windows + set YARN_ENABLE_IMMUTABLE_INSTALLS=false + cmd /c yarn install + if %ERRORLEVEL% neq 0 exit 1 + cmd /c yarn build + if %ERRORLEVEL% neq 0 exit 1 + + popd +) + +%PREFIX%/python.exe -m pip install . --no-deps --no-build-isolation --ignore-installed --no-cache-dir -vv +if %ERRORLEVEL% neq 0 exit 1 + +xcopy /i /s /y mlflow\server\js\build %SP_DIR%\mlflow\server\js\build + +if [%PKG_NAME%] NEQ [mlflow-ui-dbg] ( + rmdir /s /q %SP_DIR%\mlflow\server\js\node_modules + bash -c 'rm -f ${SP_DIR//\\\\//}/mlflow/server/js/build/static/css/*.css.map' + bash -c 'rm -f ${SP_DIR//\\\\//}/mlflow/server/js/build/static/js/*.js.map' +) diff --git a/recipe/build-mlflow.sh b/recipe/build-mlflow.sh new file mode 100644 index 0000000..4209c26 --- /dev/null +++ b/recipe/build-mlflow.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -euxo pipefail + +if [ ! -f pyproject.full.toml ]; then + cp pyproject.toml pyproject.full.toml +fi + +if [[ "${PKG_NAME}" == "mlflow-skinny" ]]; then + export MLFLOW_SKINNY=1 + # https://github.com/mlflow/mlflow/pull/4134 + cp ${RECIPE_DIR}/README_SKINNY.rst ${SRC_DIR} + cp pyproject.skinny.toml pyproject.toml +else + cp pyproject.full.toml pyproject.toml +fi + +if [[ "${PKG_NAME}" == "mlflow-ui" ]]; then + pushd mlflow/server/js + yarn install + yarn build + popd +fi + +$PREFIX/bin/python -m pip install . --no-deps --no-build-isolation --ignore-installed --no-cache-dir -vv +if [[ "$PKG_NAME" != "mlflow-ui-dbg" ]]; then + rm -rf $SP_DIR/mlflow/server/js/node_modules + rm -f $SP_DIR/mlflow/server/js/build/static/css/*.css.map + rm -f $SP_DIR/mlflow/server/js/build/static/js/*.js.map +fi diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 6a8038f..315e0c6 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,49 +1,16 @@ {% set name = "mlflow" %} {% set version = "2.18.0" %} -# MLFlow offers two variants, a "normal" install and a "skinny" install with -# a reduced installation and fewer dependencies. The skinny installation is obtained -# by setting the environment variable MLFLOW_SKINNY at pip install time. For conda -# we accomplish this with two conda packages, mflow and mlflow-skinny. Note that this -# is not the same as matplotlib-base/matplotlib, where the only differences is the -# dependency set; the installed code is different as well. - -{% if mlflow_variant == "skinny" %} -{% set mlflow_suffix = "-skinny" %} -{% set mlflow_other = "mlflow" %} -{% else %} -{% set mlflow_suffix = "" %} -{% set mlflow_other = "mlflow-skinny" %} -{% endif %} - package: - name: mlflow{{ mlflow_suffix }} + name: mlflow-split version: {{ version }} source: - # Using github as source for mlflow-skinny which does not exist on PyPI url: https://github.com/mlflow/mlflow/archive/refs/tags/v{{ version }}.zip sha256: 910ad1e2fce93b412063637d465e9291c99678a3bbccbf2b4f7736887321f44b build: number: 0 - skip: true # [py<39 or s390x] - script: | -{% if mlflow_variant == "skinny" %} - export MLFLOW_SKINNY=1 # [not win] - set MLFLOW_SKINNY=1 # [win] - cp {{ SRC_DIR }}/pyproject.toml orig_pyproject.toml # [not win] - copy {{ SRC_DIR }}\pyproject.toml orig_pyproject.toml # [win] - cp {{ SRC_DIR }}/pyproject.skinny.toml pyproject.toml # [not win] - copy {{ SRC_DIR }}\pyproject.skinny.toml pyproject.toml # [win] -{% endif %} - {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --ignore-installed --no-cache-dir -vv -{% if mlflow_variant == "skinny" %} - cp orig_pyproject.toml pyproject.toml # [not win] - copy orig_pyproject.toml pyproject.toml # [win] -{% endif %} - entry_points: - - mlflow=mlflow.cli:cli requirements: host: @@ -51,154 +18,177 @@ requirements: - python - setuptools - wheel - run: - - python - - cachetools >=5.0.0,<6 - - click >=7.0,<9 - - cloudpickle <4 - - databricks-sdk >=0.20.0,<1 - - gitpython >=3.1.9,<4 - - importlib-metadata <9,>=3.7.0,!=4.7.0 - - opentelemetry-api >=1.9.0,<3 - - opentelemetry-sdk >=1.9.0,<3 - - packaging <25 - # required on imports for win - - pytz <2025 # [win] - - protobuf >=3.12.0,<6 - - pyyaml >=5.1,<7 - - requests >=2.17.3,<3 - - sqlparse >=0.4.0,<1 -{% if mlflow_variant != "skinny" %} - - flask <4 - - jinja2 <4,>=2.11 # [not win] - - jinja2 <4,>=3.0 # [win] - - alembic <2,!=1.10.0 - - docker-py >=4.0.0,<8 - - graphene <4 - - gunicorn <24 # [not win] - - markdown >=3.3,<4 - - matplotlib-base <4 - - numpy <3 - - pandas <3 - - pyarrow <19,>=4.0.0 - - scikit-learn <2 - - scipy <2 - - sqlalchemy >=1.4.0,<3 - - waitress <4 # [win] -{% endif %} - run_constrained: - - {{ mlflow_other }} <0a0 - # extras - - google-cloud-storage >=1.30.0 - - azureml-core >=1.2.0 - # mlserver - - mlserver >=1.2.0, !=1.3.1 - - mlserver-mlflow >=1.2.0,!=1.3.1 - # mlflow-gateway, mlflow-skinny-gateway, genai - - pydantic >=1.0,<3 - - fastapi <1 - - uvicorn-standard <1 - - watchfiles <1 - - aiohttp <4 - - boto3 >=1.28.56,<2 - - tiktoken <1 - - slowapi >=0.1.9,<1 - # databricks - - azure-storage-file-datalake >12 - - google-cloud-storage >=1.30.0 - - boto3 >1 - # langchain - - langchain >=0.1.0,<=0.3.7 -test: - imports: - - mlflow - - mlflow.entities - - mlflow.projects - - mlflow.protos - - mlflow.rfunc - - mlflow.store - - mlflow.tracking - - mlflow.utils -{% if mlflow_variant != "skinny" %} - - mlflow.models - - mlflow.pyfunc - - mlflow.pytorch - - mlflow.sagemaker - - mlflow.server -{% endif %} - source_files: - - tests/artifacts - requires: - - pip - - pytest - - pillow - - numpy - commands: - - mlflow --help - - mlflow --version - - pip check - # these tests come from the conda-forge recipe -{% if mlflow_variant != "skinny" %} - - mlflow recipes --help - # This should not be packaged - - test ! -f $SP_DIR/pylint_plugins # [unix] - - echo "Checking 'mlflow' exists..." # [unix] - - pip list | grep "mlflow \+${PKG_VERSION}" # [unix] - # smoke tests - # skip test_log_artifact_windows_path_with_hostname (run only for win) - # because needs a data file - - pytest -vv tests/artifacts -k "not test_log_artifact_windows_path_with_hostname" -{% else %} - - echo "Checking 'mlflow-skinny' exists..." # [unix] - - pip list | grep "mlflow-skinny \+${PKG_VERSION}" # [unix] - # smoke tests - # skip test_load_image because numpy is not included in the skinny variant - # skip test_log_artifact_windows_path_with_hostname (run only for win) - # because needs a data file - - pytest -vv tests/artifacts -k "not (test_load_image or test_log_artifact_windows_path_with_hostname)" -{% endif %} - # test from .github/workflows/test-package-build.yml#L97 - - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" +outputs: + - name: mlflow-skinny + script: build-mlflow.sh # [unix] + script: build-mlflow.bat # [win] + version: {{ version }} + build: + entry_points: + - mlflow=mlflow.cli:cli + requirements: + host: + - pip + - python + - setuptools + run: + - python + - cachetools<6,>=5.0.0 + - click >=7.0,<9 + - cloudpickle <4 + - databricks-sdk <1,>=0.20.0 + - gitpython >=3.1.9,<4 + - importlib-metadata <9,>=3.7.0,!=4.7.0 + - opentelemetry-api<3,>=1.9.0 + - opentelemetry-sdk<3,>=1.9.0 + - packaging <25 + - protobuf >=3.12.0,<6 + # required on imports for win + - pytz <2025 # [win] + - pyyaml >=5.1,<7 + - requests >=2.17.3,<3 + - sqlparse >=0.4.0,<1 + run_constrained: + - mlflow <0a0 + # extras + - google-cloud-storage >=1.30.0 + - azureml-core >=1.2.0 + # mlserver + - mlserver >=1.2.0, !=1.3.1 + - mlserver-mlflow >=1.2.0,!=1.3.1 + # mlflow-gateway, mlflow-skinny-gateway, genai + - pydantic >=1.0,<3 + - fastapi <1 + - uvicorn-standard <1 + - watchfiles <1 + - aiohttp <4 + - boto3 >=1.28.56,<2 + - tiktoken <1 + - slowapi >=0.1.9,<1 + # databricks + - azure-storage-file-datalake >12 + - google-cloud-storage >=1.30.0 + - boto3 >1 + # langchain + - langchain >=0.1.0,<=0.3.7 + test: + imports: + - mlflow + - mlflow.entities + - mlflow.projects + - mlflow.protos + - mlflow.rfunc + - mlflow.store + - mlflow.tracking + - mlflow.utils + source_files: + - tests/artifacts + commands: + - mlflow --help + - mlflow --version + - pip list | grep "mlflow-skinny \+${PKG_VERSION}" # [unix] + - pip check + - set # [win] + # smoke tests + # skip test_load_image because numpy is not included in the skinny variant + # skip test_log_artifact_windows_path_with_hostname (run only for win) + # because needs a data file + - pytest -vv tests/artifacts -k "not (test_load_image or test_log_artifact_windows_path_with_hostname)" + # test from .github/workflows/test-package-build.yml#L97 + - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" + requires: + - pip + - pytest + - pillow + - numpy + + - name: mlflow + script: build-mlflow.sh # [unix] + script: build-mlflow.bat # [win] + version: {{ version }} + requirements: + host: + - pip + - python + - setuptools + run: + - alembic <2,!=1.10 + - docker-py >=4.0.0,<8 + - flask <4 + - graphene<4 + - gunicorn <24 # [not win] + - jinja2 <4,>=2.11 # [not win] + - jinja2 <4,>=3.0 # [win] + - markdown <4,>=3.3 + - matplotlib-base <4 + - numpy <3 + - pandas <3 + - prometheus_flask_exporter <1 + - pyarrow <19,>=4.0.0 + - querystring_parser <2 + - scikit-learn <2 + - scipy <2 + - sqlalchemy >=1.4.0,<3 + - waitress <4 # [win] + test: + imports: + - mlflow + - mlflow.entities + - mlflow.models + - mlflow.projects + - mlflow.protos + - mlflow.pyfunc + - mlflow.pytorch + - mlflow.rfunc + - mlflow.sagemaker + - mlflow.server + - mlflow.server.prometheus_exporter + - mlflow.store + - mlflow.tracking + - mlflow.utils + source_files: + - tests/artifacts + commands: + - mlflow --help + - mlflow --version + - mlflow recipes --help + # This should not be packaged + - test ! -f $SP_DIR/pylint_plugins # [unix] + - pip check + - pip list | grep "mlflow \+${PKG_VERSION}" # [unix] + - set # [win] + # smoke tests + # skip test_log_artifact_windows_path_with_hostname (run only for win) + # because needs a data file + - pytest -vv tests/artifacts -k "not test_log_artifact_windows_path_with_hostname" + # test from .github/workflows/test-package-build.yml#L97 + - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" + requires: + - pip + - pytest + - pillow + - numpy about: - home: https://mlflow.org -{% if mlflow_variant == "skinny" %} - summary: "MLflow Skinny: A Lightweight Machine Learning Lifecycle Platform Client" - description: | - MLflow Skinny is a lightweight MLflow package without SQL storage, server, - UI, or data science dependencies. -{% else %} - summary: "MLflow: A Machine Learning Lifecycle Platform" - description: | - MLflow is a platform to streamline machine learning development, including tracking - experiments, packaging code into reproducible runs, and sharing and deploying models. - MLflow offers a set of lightweight APIs that can be used with any existing machine - learning application or library (TensorFlow, PyTorch, XGBoost, etc), wherever you - currently run ML code (e.g. in notebooks, standalone applications or the cloud). -{% endif %} + home: https://mlflow.org/ license: Apache-2.0 license_family: APACHE license_file: LICENSE.txt + summary: MLflow is an open source platform for the machine learning lifecycle. doc_url: https://mlflow.org dev_url: https://github.com/mlflow/mlflow extra: feedstock-name: mlflow recipe-maintainers: + - daniellok-db + - B-Step62 + - serena-ruan + - BenWilson2 + - WeichenXu123 - harupy - - aarondav - - ahirreddy - - andrewmchen - - aveshcsingh - dbczumar - jaroslawk - - mateiz - - mparkhe - - pogil - - smurching - - sueann - - tomasatdatabricks - xhochy - - zangr - janjagusch From 2df72d8834e67e8ac11d769cf3f07df2d2cd44df Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 26 Nov 2024 13:54:55 +0200 Subject: [PATCH 6/7] mlflow 2.18.0 --- recipe/conda_build_config.yaml | 3 - recipe/meta.yaml | 113 +++++++++++++++++++++++++++------ 2 files changed, 93 insertions(+), 23 deletions(-) delete mode 100644 recipe/conda_build_config.yaml diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml deleted file mode 100644 index 8db4b96..0000000 --- a/recipe/conda_build_config.yaml +++ /dev/null @@ -1,3 +0,0 @@ -mlflow_variant: - - default - - skinny diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 315e0c6..567db3e 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -11,13 +11,14 @@ source: build: number: 0 + skip: true # [py<39 or s390x] requirements: host: + - python - pip + run: - python - - setuptools - - wheel outputs: - name: mlflow-skinny @@ -25,6 +26,7 @@ outputs: script: build-mlflow.bat # [win] version: {{ version }} build: + skip: true # [py<39 or s390x] entry_points: - mlflow=mlflow.cli:cli requirements: @@ -32,6 +34,7 @@ outputs: - pip - python - setuptools + - wheel run: - python - cachetools<6,>=5.0.0 @@ -84,9 +87,15 @@ outputs: - mlflow.utils source_files: - tests/artifacts + requires: + - pip + - pytest + - pillow + - numpy commands: - mlflow --help - mlflow --version + - echo "Checking 'mlflow-skinny' exists..." # [unix] - pip list | grep "mlflow-skinny \+${PKG_VERSION}" # [unix] - pip check - set # [win] @@ -97,40 +106,89 @@ outputs: - pytest -vv tests/artifacts -k "not (test_load_image or test_log_artifact_windows_path_with_hostname)" # test from .github/workflows/test-package-build.yml#L97 - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" - requires: - - pip - - pytest - - pillow - - numpy + + about: + home: https://mlflow.org + summary: "MLflow Skinny: A Lightweight Machine Learning Lifecycle Platform Client" + description: | + MLflow Skinny is a lightweight MLflow package without SQL storage, server, + UI, or data science dependencies. + license: Apache-2.0 + license_family: APACHE + license_file: LICENSE.txt + doc_url: https://mlflow.org + dev_url: https://github.com/mlflow/mlflow - name: mlflow script: build-mlflow.sh # [unix] script: build-mlflow.bat # [win] version: {{ version }} + build: + skip: true # [py<39 or s390x] + entry_points: + - mlflow=mlflow.cli:cli requirements: host: - pip - python - setuptools + - wheel run: - - alembic <2,!=1.10 - - docker-py >=4.0.0,<8 + - python + - cachetools >=5.0.0,<6 + - click >=7.0,<9 + - cloudpickle <4 + - databricks-sdk >=0.20.0,<1 + - gitpython >=3.1.9,<4 + - importlib-metadata <9,>=3.7.0,!=4.7.0 + - opentelemetry-api >=1.9.0,<3 + - opentelemetry-sdk >=1.9.0,<3 + - packaging <25 + # required on imports for win + - pytz <2025 # [win] + - protobuf >=3.12.0,<6 + - pyyaml >=5.1,<7 + - requests >=2.17.3,<3 + - sqlparse >=0.4.0,<1 - flask <4 - - graphene<4 - - gunicorn <24 # [not win] - jinja2 <4,>=2.11 # [not win] - jinja2 <4,>=3.0 # [win] - - markdown <4,>=3.3 + - alembic <2,!=1.10.0 + - docker-py >=4.0.0,<8 + - graphene <4 + - gunicorn <24 # [not win] + - markdown >=3.3,<4 - matplotlib-base <4 - numpy <3 - pandas <3 - - prometheus_flask_exporter <1 - pyarrow <19,>=4.0.0 - - querystring_parser <2 - scikit-learn <2 - scipy <2 - sqlalchemy >=1.4.0,<3 - waitress <4 # [win] + run_constrained: + - mlflow-skinny <0a0 + # extras + - google-cloud-storage >=1.30.0 + - azureml-core >=1.2.0 + # mlserver + - mlserver >=1.2.0, !=1.3.1 + - mlserver-mlflow >=1.2.0,!=1.3.1 + # mlflow-gateway, mlflow-skinny-gateway, genai + - pydantic >=1.0,<3 + - fastapi <1 + - uvicorn-standard <1 + - watchfiles <1 + - aiohttp <4 + - boto3 >=1.28.56,<2 + - tiktoken <1 + - slowapi >=0.1.9,<1 + # databricks + - azure-storage-file-datalake >12 + - google-cloud-storage >=1.30.0 + - boto3 >1 + # langchain + - langchain >=0.1.0,<=0.3.7 test: imports: - mlflow @@ -143,12 +201,16 @@ outputs: - mlflow.rfunc - mlflow.sagemaker - mlflow.server - - mlflow.server.prometheus_exporter - mlflow.store - mlflow.tracking - mlflow.utils source_files: - tests/artifacts + requires: + - pip + - pytest + - pillow + - numpy commands: - mlflow --help - mlflow --version @@ -156,6 +218,7 @@ outputs: # This should not be packaged - test ! -f $SP_DIR/pylint_plugins # [unix] - pip check + - echo "Checking 'mlflow' exists..." # [unix] - pip list | grep "mlflow \+${PKG_VERSION}" # [unix] - set # [win] # smoke tests @@ -164,11 +227,21 @@ outputs: - pytest -vv tests/artifacts -k "not test_log_artifact_windows_path_with_hostname" # test from .github/workflows/test-package-build.yml#L97 - python -c "import mlflow; print(mlflow.__version__); assert(mlflow.__version__ == '{{ version }}');" - requires: - - pip - - pytest - - pillow - - numpy + + about: + home: https://mlflow.org + summary: "MLflow: A Machine Learning Lifecycle Platform" + description: | + MLflow is a platform to streamline machine learning development, including tracking + experiments, packaging code into reproducible runs, and sharing and deploying models. + MLflow offers a set of lightweight APIs that can be used with any existing machine + learning application or library (TensorFlow, PyTorch, XGBoost, etc), wherever you + currently run ML code (e.g. in notebooks, standalone applications or the cloud). + license: Apache-2.0 + license_family: APACHE + license_file: LICENSE.txt + doc_url: https://mlflow.org + dev_url: https://github.com/mlflow/mlflow about: home: https://mlflow.org/ From 75a447ab0eed7a1f980d99329aba2043ba363174 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Thu, 28 Nov 2024 15:28:06 +0200 Subject: [PATCH 7/7] Fix linter error --- recipe/meta.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 567db3e..695eb88 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -37,14 +37,14 @@ outputs: - wheel run: - python - - cachetools<6,>=5.0.0 + - cachetools <6,>=5.0.0 - click >=7.0,<9 - cloudpickle <4 - databricks-sdk <1,>=0.20.0 - gitpython >=3.1.9,<4 - importlib-metadata <9,>=3.7.0,!=4.7.0 - - opentelemetry-api<3,>=1.9.0 - - opentelemetry-sdk<3,>=1.9.0 + - opentelemetry-api <3,>=1.9.0 + - opentelemetry-sdk <3,>=1.9.0 - packaging <25 - protobuf >=3.12.0,<6 # required on imports for win