mlflow / mlflow-export-import

Apache License 2.0
110 stars 70 forks source link

Installing with pip does not fetch all dependencies #172

Open hatcherdw opened 4 months ago

hatcherdw commented 4 months ago

Installing mlflow-export-import version 1.2.0 with pip does not fetch the tabulate or databricks-cli dependencies. I have observed this in two different environments: (Ubuntu 20.04, Python 3.8.18, pip 23.0.1) and (Windows 10, Python 3.8.9, pip 20.2.3). In both environments pip was configured to use the default index at pypi.org. Here is the output of an install into an empty virtual environment:

pip install mlflow-export-import
Collecting mlflow-export-import
  Using cached mlflow_export_import-1.2.0-py3-none-any.whl (50 kB)
Collecting wheel
  Using cached wheel-0.42.0-py3-none-any.whl (65 kB)
Collecting pytest>=7.2.0
  Using cached pytest-8.0.1-py3-none-any.whl (333 kB)
Collecting shortuuid
  Using cached shortuuid-1.0.11-py3-none-any.whl (10 kB)
Collecting pytest-html
  Using cached pytest_html-4.1.1-py3-none-any.whl (23 kB)
Collecting mlflow>=1.28.0
  Using cached mlflow-2.10.2-py3-none-any.whl (19.5 MB)
Collecting iniconfig
  Using cached iniconfig-2.0.0-py3-none-any.whl (5.9 kB)
Collecting colorama; sys_platform == "win32"
  Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Collecting pluggy<2.0,>=1.3.0
  Using cached pluggy-1.4.0-py3-none-any.whl (20 kB)
Collecting exceptiongroup>=1.0.0rc8; python_version < "3.11"
  Using cached exceptiongroup-1.2.0-py3-none-any.whl (16 kB)
Collecting tomli>=1.0.0; python_version < "3.11"
  Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting packaging
  Using cached packaging-23.2-py3-none-any.whl (53 kB)
Collecting jinja2>=3.0.0
  Using cached Jinja2-3.1.3-py3-none-any.whl (133 kB)
Collecting pytest-metadata>=2.0.0
  Using cached pytest_metadata-3.1.1-py3-none-any.whl (11 kB)
Collecting click<9,>=7.0
  Using cached click-8.1.7-py3-none-any.whl (97 kB)
Collecting gitpython<4,>=2.1.0
  Using cached GitPython-3.1.42-py3-none-any.whl (195 kB)
Collecting sqlalchemy<3,>=1.4.0
  Using cached SQLAlchemy-2.0.27-cp38-cp38-win_amd64.whl (2.1 MB)
Collecting matplotlib<4
  Using cached matplotlib-3.7.5-cp38-cp38-win_amd64.whl (7.5 MB)
Collecting importlib-metadata!=4.7.0,<8,>=3.7.0
  Using cached importlib_metadata-7.0.1-py3-none-any.whl (23 kB)
Collecting cloudpickle<4
  Using cached cloudpickle-3.0.0-py3-none-any.whl (20 kB)
Collecting entrypoints<1
  Using cached entrypoints-0.4-py3-none-any.whl (5.3 kB)
Collecting sqlparse<1,>=0.4.0
  Using cached sqlparse-0.4.4-py3-none-any.whl (41 kB)
Collecting Flask<4
  Using cached flask-3.0.2-py3-none-any.whl (101 kB)
Collecting scipy<2
  Using cached scipy-1.10.1-cp38-cp38-win_amd64.whl (42.2 MB)
Collecting pyarrow<16,>=4.0.0
  Using cached pyarrow-15.0.0-cp38-cp38-win_amd64.whl (24.9 MB)
Collecting protobuf<5,>=3.12.0
  Using cached protobuf-4.25.3-cp38-cp38-win_amd64.whl (413 kB)
Collecting markdown<4,>=3.3
  Using cached Markdown-3.5.2-py3-none-any.whl (103 kB)
Collecting numpy<2
  Using cached numpy-1.24.4-cp38-cp38-win_amd64.whl (14.9 MB)
Collecting pytz<2024
  Using cached pytz-2023.4-py2.py3-none-any.whl (506 kB)
Collecting docker<8,>=4.0.0
  Using cached docker-7.0.0-py3-none-any.whl (147 kB)
Collecting waitress<3; platform_system == "Windows"
  Using cached waitress-2.1.2-py3-none-any.whl (57 kB)
Collecting alembic!=1.10.0,<2
  Using cached alembic-1.13.1-py3-none-any.whl (233 kB)
Collecting querystring-parser<2
  Using cached querystring_parser-1.2.4-py2.py3-none-any.whl (7.9 kB)
Collecting requests<3,>=2.17.3
  Using cached requests-2.31.0-py3-none-any.whl (62 kB)
Collecting scikit-learn<2
  Using cached scikit_learn-1.3.2-cp38-cp38-win_amd64.whl (9.3 MB)
Collecting pandas<3
  Using cached pandas-2.0.3-cp38-cp38-win_amd64.whl (10.8 MB)
Collecting pyyaml<7,>=5.1
  Using cached PyYAML-6.0.1-cp38-cp38-win_amd64.whl (157 kB)
Collecting MarkupSafe>=2.0
  Using cached MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl (17 kB)
Collecting gitdb<5,>=4.0.1
  Using cached gitdb-4.0.11-py3-none-any.whl (62 kB)
Collecting greenlet!=0.4.17; platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32")))))
  Using cached greenlet-3.0.3-cp38-cp38-win_amd64.whl (290 kB)
Collecting typing-extensions>=4.6.0
  Using cached typing_extensions-4.9.0-py3-none-any.whl (32 kB)
Collecting fonttools>=4.22.0
  Using cached fonttools-4.49.0-cp38-cp38-win_amd64.whl (1.5 MB)
Collecting kiwisolver>=1.0.1
  Using cached kiwisolver-1.4.5-cp38-cp38-win_amd64.whl (56 kB)
Collecting contourpy>=1.0.1
  Using cached contourpy-1.1.1-cp38-cp38-win_amd64.whl (477 kB)
Collecting pyparsing>=2.3.1
  Using cached pyparsing-3.1.1-py3-none-any.whl (103 kB)
Collecting cycler>=0.10
  Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)
Collecting importlib-resources>=3.2.0; python_version < "3.10"
  Using cached importlib_resources-6.1.1-py3-none-any.whl (33 kB)
Collecting pillow>=6.2.0
  Using cached pillow-10.2.0-cp38-cp38-win_amd64.whl (2.6 MB)
Collecting python-dateutil>=2.7
  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting zipp>=0.5
  Using cached zipp-3.17.0-py3-none-any.whl (7.4 kB)
Collecting itsdangerous>=2.1.2
  Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Collecting blinker>=1.6.2
  Using cached blinker-1.7.0-py3-none-any.whl (13 kB)
Collecting Werkzeug>=3.0.0
  Using cached werkzeug-3.0.1-py3-none-any.whl (226 kB)
Collecting urllib3>=1.26.0
  Using cached urllib3-2.2.1-py3-none-any.whl (121 kB)
Collecting pywin32>=304; sys_platform == "win32"
  Using cached pywin32-306-cp38-cp38-win_amd64.whl (9.4 MB)
Collecting Mako
  Using cached Mako-1.3.2-py3-none-any.whl (78 kB)
Collecting six
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2024.2.2-py3-none-any.whl (163 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.6-py3-none-any.whl (61 kB)
Collecting charset-normalizer<4,>=2
  Using cached charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl (99 kB)
Collecting threadpoolctl>=2.0.0
  Using cached threadpoolctl-3.3.0-py3-none-any.whl (17 kB)
Collecting joblib>=1.1.1
  Using cached joblib-1.3.2-py3-none-any.whl (302 kB)
Collecting tzdata>=2022.1
  Using cached tzdata-2024.1-py2.py3-none-any.whl (345 kB)
Collecting smmap<6,>=3.0.1
  Using cached smmap-5.0.1-py3-none-any.whl (24 kB)
Installing collected packages: wheel, iniconfig, colorama, pluggy, exceptiongroup, tomli, packaging, pytest, shortuuid, MarkupSafe, jinja2, pytest-metadata, pytest-html, click, smmap, gitdb, gitpython, greenlet, typing-extensions, sqlalchemy, fonttools, kiwisolver, numpy, contourpy, pyparsing, cycler, zipp, importlib-resources, pillow, six, python-dateutil, matplotlib, importlib-metadata, cloudpickle, entrypoints, sqlparse, itsdangerous, blinker, Werkzeug, Flask, scipy, pyarrow, protobuf, markdown, pytz, urllib3, pywin32, certifi, idna, charset-normalizer, requests, docker, waitress, Mako, alembic, querystring-parser, threadpoolctl, joblib, scikit-learn, tzdata, pandas, pyyaml, mlflow, mlflow-export-import

And here is an example of a broken entrypoint from that install:

export-experiment --help
Traceback (most recent call last):
  File "C:\Users\DWH036\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\DWH036\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\DWH036\Desktop\mlflow_export_import\venv\Scripts\export-experiment.exe\__main__.py", line 4, in <module>
  File "c:\users\dwh036\desktop\mlflow_export_import\venv\lib\site-packages\mlflow_export_import\experiment\export_experiment.py", line 12, in <module>
    from mlflow_export_import.common import utils
  File "c:\users\dwh036\desktop\mlflow_export_import\venv\lib\site-packages\mlflow_export_import\common\utils.py", line 2, in <module>
    from tabulate import tabulate
ModuleNotFoundError: No module named 'tabulate'

We last used this install process on December 13, 2023. The issue was first noticed on February 14, 2024.

hatcherdw commented 4 months ago

Tried using a machine on a different network as well (Windows 11, Python 3.10.9, pip 22.3.1). Same result - ModuleNotFoundError: No module named 'tabulate' when installing in an empty virtual environment and trying to use the export-experiment entrypoint.

samuelv8 commented 2 months ago

+1 on this