Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lighten or make the heavy package dependencies optional #1692

Open
owenlamont opened this issue Oct 12, 2023 · 23 comments
Open

Lighten or make the heavy package dependencies optional #1692

owenlamont opened this issue Oct 12, 2023 · 23 comments

Comments

@owenlamont
Copy link

owenlamont commented Oct 12, 2023

Is your feature request related to a problem? Please describe.
My problem is the dependencies of the arcgis package are so big and heavy its extremely onerous to incorporate arcgis into an existing Python application, even though often the features of arcgis we use don't require any of the really heavy dependencies (jupyter, pillow, ipywidgets, pandas, dask, numpy, matplotlib, etc.)

E.g. dependencies for arcgis 2.2.0

dependencies = [
        "pillow",
        "urllib3>=1.21.1,<3",
        "cachetools",
        "lxml",
        "notebook",
        "cryptography",
        "ipywidgets >=7,<8",
        "widgetsnbextension >=3",
        "jupyter-client <=6.1.12",
        "pandas >=2.0.0,<3",
        "numpy >=1.21.6",
        "matplotlib",
        "keyring >=23.3.0",
        "pylerc",
        "ujson >=3",
        "jupyterlab",
        "python-certifi-win32;python_version<'3.10'",
        "truststore>=0.7.0;python_version>'3.9'",
        'pywin32 >=223;platform_system=="Windows"',
        "pyshp >=2",
        "geomet",
        "requests >=2.27.1,<3",
        "requests-oauthlib",
        "requests_toolbelt",
        "pyspnego >=0.8.0",
        "requests-kerberos",
        "requests-gssapi",
        "dask >=2023.3.2",
        "matplotlib-inline",
    ]

Describe the solution you'd like
I'd like the arcgis package restructured or designed to make all the really heavy dependencies optional, so I can only include the ones I need for the functions I use.

Describe alternatives you've considered
The first alternative I tried was continuing to use arcgis as is and tolerating the hundreds of megabytes of additional dependencies it would pull in that we didn't need, and the extra 10+ minutes of dependency resolving time this would incur every time we need to update our own dependencies.

The current alternative I use (which is very time consuming and painful for me) is to perform the operations I do need with arcgis, reverse engineer the requests it makes to the REST API, then re-implement the minimal parts of the arcgis package I need for my own application.

@nanaeaubry
Copy link
Contributor

@owenlamont Thanks for bringing this up, we are actively working on this and will have updates in the future to help with this workflow.

@hildermesmedeiros
Copy link

hildermesmedeiros commented Oct 12, 2023

I think you could consider a similar approach to Dask. You could implement ArcGIS Core using one of the following commands:

pip install arcgis-core

or

conda install arcgis-core

Dask documentation for more information: https://docs.dask.org/en/stable/install.html

@achapkowski
Copy link
Contributor

@hildermesmedeiros @owenlamont if you wouldn't mind, could to explain that areas of the Python API you mainly use and what areas you never touch?

@owenlamont
Copy link
Author

owenlamont commented Oct 12, 2023

For my current appliction its CRUD operations around FeatureLayers, more specifically I want to programmatically upload geojson files, publish them as FeatureLayers, replace the geojson file currently associated with an existing FeatureLayer, and in future maybe some other minor update operations around renaming, deleting, or updating metadata for those types of entities.

@owenlamont
Copy link
Author

I know the story around optional dependencies in conda isn't so good (you probably have to publish multiple conda packages with different combinations of dependencies). Pip allows different dependency profiles where you could select the subset of dependencies you need, e.g.

pip install arcgis[all] or pip install arcgis[jupyter]

If you go down that path I'd suggest if a user just runs pip install arcgis they just get the minimal core dependencies.

@achapkowski
Copy link
Contributor

No this is a great story and suggestions. Thank you for sharing this.

@owenlamont
Copy link
Author

Glad to hear it, with my above comment I just meant its a bit trickier/harder to support optional dependencies in conda than it is in pip (even though in general I like conda better).

@owenlamont
Copy link
Author

If you're interested I know there's been discussion in the conda community for supporting that style of pip optional dependencies here and later here. I'm not quite sure what the current state of it is.

@achapkowski
Copy link
Contributor

Glad to hear it, with my above comment I just meant its a bit trickier/harder to support optional dependencies in conda than it is in pip (even though in general I like conda better).

It is, we are looking into building a set of namespace packages for a future release. Having folks, like yourself, post how they use the API helps us understand how different users use the API. If you know of other use cases, please post more of them!

@hildermesmedeiros
Copy link

hildermesmedeiros commented Oct 15, 2023

To do the minimal deps I do something similar to this guide: https://developers.arcgis.com/python/guide/install-and-set-up/
image

I'd like we had the conda install arcgis-core idea but you might have more work overhead.

With many customers using the cloud the fight over cost is increasing, and files size is one of the many costs to be fought these days, at least on my side it has been more frequent.

For example, a customer needed to verify that some key FeatureLayers features were being updated correctly. We created a script, it runs every 5 minutes to check if everything is as expected, otherwise it creates it as json and Geoevent sends an email.

Another client wanted to create a routing system using Arcgis Server, but did not want the logic to be executed on the server but rather clound on the same infrastructure and asked for it to be as small as possible and without dependency on arcpy.

This kind of thing...

@owenlamont
Copy link
Author

owenlamont commented Oct 15, 2023

Thanks, I missed that minimal dependencies documentation. Although I don't think that would work for us - we use pip-tools to maintain our application dependencies and you can't specify a package be installed with --no-deps with that..

Some of those minimal requests dependencies are platform/authentication type specific themselves right? I know when I implemented a Python client to authenticate and connect with the REST API (which is deployed to a Linux docker image) I did need requests and requests-oauthlib - but things like requests-kerberos and several of those other dependencies are just for Windows SSO auth?

@hildermesmedeiros
Copy link

hildermesmedeiros commented Oct 16, 2023

@owenlamont , no. Most are not Windows bound.
Most are just protocols or ways of doing authentication or automations in backend

  • requests-toolbelt
    collection of utilities that some users of python-requests might need but do not belong in requests proper. How to keep the tcp alive? How to handle sockets? Those and more are implemented there.

  • requests-kerberos
    protocol Kerberos/GSSAPI of authentication in 3 ways, it kinda safe, so there is auth in linux, windows, mac...it is a protocol. The company, the IT might implement it, You will be bound to respect it.

  • requests-oauthlib
    high level implementation of auth1 and auth2 request.

  • requests-gssapi
    It provides a fully backward-compatible shim for the old python-requests-kerberos library: simply replace. yeah, old stuff, life sucks. But i guess request-kerberos could be used in this case, don`t know.
    import.requests_kerberos with import requests_gssapi

  • requests_ntlm2
    Implements Windows auth method NTLM. Windows does the favour of using kerberos but, if things goes wrongs it falls back to old methods, just cause they can, why not.

@CallumNZ
Copy link

CallumNZ commented Mar 5, 2024

My Docker build takes 11 minutes to build, but most of that time (around 8 minutes) is spent installing ujson which is required by arcgis.

@ruckc
Copy link

ruckc commented May 16, 2024

My issue is I want to use arcgis library for it's arcgis rest api client... in a server application... and all the dependencies bloat the container. It would be better if the heavy dependencies can't be spun out to potentially push the rest client out to a separate dependency that just depends on the minimum to interact with the REST api.

@MartyP233
Copy link

this improvement would be great - i also have an 11 minute container build. A common build pattern for containers is to pip install packages from a requirements.txt file which doesn't support the --no-deps argument pypa/pip#10837

@nanaeaubry
Copy link
Contributor

Hi everyone!

Thanks for all the input and opinions, please continue to provide your input as this helps us when choosing to prioritize enhancements.
For this issue in particular, we have been actively working on it and there will be improvements and changes made to make the package lighter and split up in a more optimized way. We don't have a set timeline to provide as of now since there are some bigger changes involved but we will update the post when possible with more information.

@arr175
Copy link

arr175 commented Oct 9, 2024

An example of why this improvement is important is that I'm currently struggling to get the arcgis package installed in Databricks due to a krb5 dependency issue, meanwhile I won't be using kerberos for authentication. I tried the --no-deps command to install the arcgis api, but importing failed due to missing arcgis-mapping module. I went through all the suggested solutions to install krb5 with no luck, but again, I won't be using kerberos.

@nanaeaubry
Copy link
Contributor

@arr175 The arcgis-mapping package should not rely on krb5. You can do the no deps install and then install arcgis-mapping as well. This has a dependency on jupyter lab and related widget libraries.

@arr175
Copy link

arr175 commented Oct 9, 2024

@nanaeaubry The arcgis-mapping package seems to have a dependency on requests_kerberos and requests_gssapi which depend on gssapi and krb5. I can't find the github repo page for arcgis-mapping so I'm not sure which parts are depending on krb5, but installing arcgis with --no-deps did not let me load even a blank map. See the installation log below for just installing arcgis-mapping.

Collecting arcgis-mapping
  Downloading arcgis_mapping-4.30.0-py3-none-any.whl (6.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 48.9 MB/s eta 0:00:00
Collecting anywidget==0.9.13
  Downloading anywidget-0.9.13-py3-none-any.whl (213 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 213.7/213.7 kB 361.4 MB/s eta 0:00:00
Collecting pydantic>=2.4.0
  Downloading pydantic-2.9.2-py3-none-any.whl (434 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 434.9/434.9 kB 157.3 MB/s eta 0:00:00
Collecting jupyterlab<5,>=4.0.7
  Downloading jupyterlab-4.2.5-py3-none-any.whl (11.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.6/11.6 MB 227.4 MB/s eta 0:00:00
Collecting ipywidgets>=8.0.0
  Downloading ipywidgets-8.1.5-py3-none-any.whl (139 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.8/139.8 kB 367.7 MB/s eta 0:00:00
Collecting arcgis<2.5.0,>=2.4.0
  Downloading arcgis-2.4.0.tar.gz (46.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.8/46.8 MB 275.2 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting psygnal>=0.8.1
  Downloading psygnal-0.11.1-py3-none-any.whl (76 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.0/77.0 kB 311.1 MB/s eta 0:00:00
Collecting typing-extensions>=4.2.0
  Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting pillow
  Downloading pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl (4.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4/4.4 MB 277.7 MB/s eta 0:00:00
Collecting urllib3<3,>=1.26.1
  Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.3/126.3 kB 301.1 MB/s eta 0:00:00
Collecting cachetools
  Downloading cachetools-5.5.0-py3-none-any.whl (9.5 kB)
Collecting lxml
  Downloading lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl (4.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.8/4.8 MB 273.5 MB/s eta 0:00:00
Collecting cryptography
  Downloading cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl (3.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 376.4 MB/s eta 0:00:00
Collecting pandas<2.2.0,>=2.0.0
  Downloading pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 233.2 MB/s eta 0:00:00
Collecting numpy<2,>=1.21.6
  Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2/14.2 MB 214.2 MB/s eta 0:00:00
Collecting matplotlib
  Downloading matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2/8.2 MB 322.9 MB/s eta 0:00:00
Collecting keyring>=23.3.0
  Downloading keyring-25.4.1-py3-none-any.whl (38 kB)
Collecting pylerc
  Downloading pylerc-4.0.tar.gz (738 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 738.5/738.5 kB 394.7 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting ujson>=3
  Downloading ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (51 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.0/52.0 kB 270.4 MB/s eta 0:00:00
Collecting pyshp>=2
  Downloading pyshp-2.3.1-py2.py3-none-any.whl (46 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.5/46.5 kB 251.0 MB/s eta 0:00:00
Collecting geomet
  Downloading geomet-1.1.0-py3-none-any.whl (31 kB)
Collecting requests<2.32.0,>=2.30.0
  Downloading requests-2.31.0-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 290.3 MB/s eta 0:00:00
Collecting requests-oauthlib
  Downloading requests_oauthlib-2.0.0-py2.py3-none-any.whl (24 kB)
Collecting requests_toolbelt
  Downloading requests_toolbelt-1.0.0-py2.py3-none-any.whl (54 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.5/54.5 kB 287.8 MB/s eta 0:00:00
Collecting pyspnego>=0.8.0
  Downloading pyspnego-0.11.1-py3-none-any.whl (130 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 130.5/130.5 kB 330.7 MB/s eta 0:00:00
Collecting requests-kerberos
  Downloading requests_kerberos-0.15.0-py2.py3-none-any.whl (12 kB)
Collecting requests-gssapi
  Downloading requests_gssapi-1.3.0-py3-none-any.whl (12 kB)
Collecting dask>=2023.3.2
  Downloading dask-2024.9.1-py3-none-any.whl (1.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 327.0 MB/s eta 0:00:00
Collecting matplotlib-inline
  Downloading matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB)
Collecting pyarrow>=11.0.0
  Downloading pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl (38.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 38.7/38.7 MB 161.3 MB/s eta 0:00:00
Collecting puremagic<2,>=1.15
  Downloading puremagic-1.28-py3-none-any.whl (43 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.2/43.2 kB 248.7 MB/s eta 0:00:00
Collecting truststore>=0.7.0
  Downloading truststore-0.9.2-py3-none-any.whl (17 kB)
Collecting ipython>=6.1.0
  Downloading ipython-8.28.0-py3-none-any.whl (819 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 819.5/819.5 kB 376.4 MB/s eta 0:00:00
Collecting traitlets>=4.3.1
  Downloading traitlets-5.14.3-py3-none-any.whl (85 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.4/85.4 kB 345.5 MB/s eta 0:00:00
Collecting jupyterlab-widgets~=3.0.12
  Downloading jupyterlab_widgets-3.0.13-py3-none-any.whl (214 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 214.4/214.4 kB 402.0 MB/s eta 0:00:00
Collecting comm>=0.1.3
  Downloading comm-0.2.2-py3-none-any.whl (7.2 kB)
Collecting widgetsnbextension~=4.0.12
  Downloading widgetsnbextension-4.0.13-py3-none-any.whl (2.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 MB 398.6 MB/s eta 0:00:00
Collecting async-lru>=1.0.0
  Downloading async_lru-2.0.4-py3-none-any.whl (6.1 kB)
Collecting jupyter-core
  Downloading jupyter_core-5.7.2-py3-none-any.whl (28 kB)
Collecting ipykernel>=6.5.0
  Downloading ipykernel-6.29.5-py3-none-any.whl (117 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.2/117.2 kB 311.7 MB/s eta 0:00:00
Collecting tomli>=1.2.2
  Downloading tomli-2.0.2-py3-none-any.whl (13 kB)
Collecting tornado>=6.2.0
  Downloading tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (437 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 437.2/437.2 kB 399.4 MB/s eta 0:00:00
Collecting jupyter-lsp>=2.0.0
  Downloading jupyter_lsp-2.2.5-py3-none-any.whl (69 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.1/69.1 kB 293.1 MB/s eta 0:00:00
Collecting httpx>=0.25.0
  Downloading httpx-0.27.2-py3-none-any.whl (76 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.4/76.4 kB 290.8 MB/s eta 0:00:00
Collecting jupyter-server<3,>=2.4.0
  Downloading jupyter_server-2.14.2-py3-none-any.whl (383 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 383.6/383.6 kB 382.5 MB/s eta 0:00:00
Collecting notebook-shim>=0.2
  Downloading notebook_shim-0.2.4-py3-none-any.whl (13 kB)
Collecting setuptools>=40.1.0
  Downloading setuptools-75.1.0-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 414.9 MB/s eta 0:00:00
Collecting jinja2>=3.0.3
  Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.3/133.3 kB 359.1 MB/s eta 0:00:00
Collecting packaging
  Downloading packaging-24.1-py3-none-any.whl (53 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.0/54.0 kB 275.5 MB/s eta 0:00:00
Collecting jupyterlab-server<3,>=2.27.1
  Downloading jupyterlab_server-2.27.3-py3-none-any.whl (59 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.7/59.7 kB 278.6 MB/s eta 0:00:00
Collecting annotated-types>=0.6.0
  Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Collecting pydantic-core==2.23.4
  Downloading pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 265.9 MB/s eta 0:00:00
Collecting fsspec>=2021.09.0
  Downloading fsspec-2024.9.0-py3-none-any.whl (179 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 179.3/179.3 kB 375.4 MB/s eta 0:00:00
Collecting pyyaml>=5.3.1
  Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (718 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 718.5/718.5 kB 424.2 MB/s eta 0:00:00
Collecting partd>=1.4.0
  Downloading partd-1.4.2-py3-none-any.whl (18 kB)
Collecting importlib-metadata>=4.13.0
  Downloading importlib_metadata-8.5.0-py3-none-any.whl (26 kB)
Collecting click>=8.1
  Downloading click-8.1.7-py3-none-any.whl (97 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 345.2 MB/s eta 0:00:00
Collecting cloudpickle>=3.0.0
  Downloading cloudpickle-3.0.0-py3-none-any.whl (20 kB)
Collecting toolz>=0.10.0
  Downloading toolz-1.0.0-py3-none-any.whl (56 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.4/56.4 kB 260.9 MB/s eta 0:00:00
Collecting idna
  Downloading idna-3.10-py3-none-any.whl (70 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.4/70.4 kB 300.4 MB/s eta 0:00:00
Collecting httpcore==1.*
  Downloading httpcore-1.0.6-py3-none-any.whl (78 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.0/78.0 kB 310.3 MB/s eta 0:00:00
Collecting sniffio
  Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Collecting anyio
  Downloading anyio-4.6.0-py3-none-any.whl (89 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.6/89.6 kB 325.7 MB/s eta 0:00:00
Collecting certifi
  Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.3/167.3 kB 374.5 MB/s eta 0:00:00
Collecting h11<0.15,>=0.13
  Downloading h11-0.14.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 288.0 MB/s eta 0:00:00
Collecting jupyter-client>=6.1.12
  Downloading jupyter_client-8.6.3-py3-none-any.whl (106 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.1/106.1 kB 323.8 MB/s eta 0:00:00
Collecting debugpy>=1.6.5
  Downloading debugpy-1.8.6-py2.py3-none-any.whl (5.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.2/5.2 MB 191.7 MB/s eta 0:00:00
Collecting nest-asyncio
  Downloading nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB)
Collecting pyzmq>=24
  Downloading pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (673 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 673.2/673.2 kB 390.2 MB/s eta 0:00:00
Collecting psutil
  Downloading psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (292 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 292.0/292.0 kB 367.5 MB/s eta 0:00:00
Collecting pexpect>4.3
  Downloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.8/63.8 kB 240.3 MB/s eta 0:00:00
Collecting exceptiongroup
  Downloading exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Collecting prompt-toolkit<3.1.0,>=3.0.41
  Downloading prompt_toolkit-3.0.48-py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.6/386.6 kB 408.0 MB/s eta 0:00:00
Collecting pygments>=2.4.0
  Downloading pygments-2.18.0-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 392.1 MB/s eta 0:00:00
Collecting stack-data
  Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)
Collecting decorator
  Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting jedi>=0.16
  Downloading jedi-0.19.1-py2.py3-none-any.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 386.2 MB/s eta 0:00:00
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (21 kB)
Collecting platformdirs>=2.5
  Downloading platformdirs-4.3.6-py3-none-any.whl (18 kB)
Collecting overrides>=5.0
  Downloading overrides-7.7.0-py3-none-any.whl (17 kB)
Collecting prometheus-client>=0.9
  Downloading prometheus_client-0.21.0-py3-none-any.whl (54 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.7/54.7 kB 284.3 MB/s eta 0:00:00
Collecting jupyter-events>=0.9.0
  Downloading jupyter_events-0.10.0-py3-none-any.whl (18 kB)
Collecting nbconvert>=6.4.4
  Downloading nbconvert-7.16.4-py3-none-any.whl (257 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 257.4/257.4 kB 401.1 MB/s eta 0:00:00
Collecting jupyter-server-terminals>=0.4.4
  Downloading jupyter_server_terminals-0.5.3-py3-none-any.whl (13 kB)
Collecting nbformat>=5.3.0
  Downloading nbformat-5.10.4-py3-none-any.whl (78 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.5/78.5 kB 312.5 MB/s eta 0:00:00
Collecting send2trash>=1.8.2
  Downloading Send2Trash-1.8.3-py3-none-any.whl (18 kB)
Collecting terminado>=0.8.3
  Downloading terminado-0.18.1-py3-none-any.whl (14 kB)
Collecting websocket-client>=1.7
  Downloading websocket_client-1.8.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.8/58.8 kB 289.8 MB/s eta 0:00:00
Collecting argon2-cffi>=21.1
  Downloading argon2_cffi-23.1.0-py3-none-any.whl (15 kB)
Collecting babel>=2.10
  Downloading babel-2.16.0-py3-none-any.whl (9.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6/9.6 MB 359.3 MB/s eta 0:00:00
Collecting json5>=0.9.0
  Downloading json5-0.9.25-py3-none-any.whl (30 kB)
Collecting jsonschema>=4.18.0
  Downloading jsonschema-4.23.0-py3-none-any.whl (88 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.5/88.5 kB 300.4 MB/s eta 0:00:00
Collecting jaraco.classes
  Downloading jaraco.classes-3.4.0-py3-none-any.whl (6.8 kB)
Collecting SecretStorage>=3.2
  Downloading SecretStorage-3.3.3-py3-none-any.whl (15 kB)
Collecting jaraco.functools
  Downloading jaraco.functools-4.1.0-py3-none-any.whl (10 kB)
Collecting jeepney>=0.4.2
  Downloading jeepney-0.8.0-py3-none-any.whl (48 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.4/48.4 kB 232.1 MB/s eta 0:00:00
Collecting jaraco.context
  Downloading jaraco.context-6.0.1-py3-none-any.whl (6.8 kB)
Collecting tzdata>=2022.1
  Downloading tzdata-2024.2-py2.py3-none-any.whl (346 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 346.6/346.6 kB 408.2 MB/s eta 0:00:00
Collecting python-dateutil>=2.8.2
  Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 392.3 MB/s eta 0:00:00
Collecting pytz>=2020.1
  Downloading pytz-2024.2-py2.py3-none-any.whl (508 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 508.0/508.0 kB 411.1 MB/s eta 0:00:00
Collecting charset-normalizer<4,>=2
  Downloading charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (140 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.0/140.0 kB 360.6 MB/s eta 0:00:00
Collecting cffi>=1.12
  Downloading cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (448 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 448.2/448.2 kB 410.7 MB/s eta 0:00:00
Collecting fonttools>=4.22.0
  Downloading fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 130.1 MB/s eta 0:00:00
Collecting kiwisolver>=1.3.1
  Downloading kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 381.1 MB/s eta 0:00:00
Collecting pyparsing>=2.3.1
  Downloading pyparsing-3.1.4-py3-none-any.whl (104 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.1/104.1 kB 322.9 MB/s eta 0:00:00
Collecting contourpy>=1.0.1
  Downloading contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (308 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 308.5/308.5 kB 385.5 MB/s eta 0:00:00
Collecting cycler>=0.10
  Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)
Collecting gssapi
  Downloading gssapi-1.9.0.tar.gz (94 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.3/94.3 kB 335.9 MB/s eta 0:00:00
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'error'
  error: subprocess-exited-with-error
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [21 lines of output]
      /bin/sh: 1: krb5-config: not found

@nanaeaubry
Copy link
Contributor

@jtroe We should look into this since this looks like a dependency from another package we are using and not coming from us.

@arr175 The repo is private as of now but here are the dependencies:
image

My guess is one of these is dependent on krb5

@ruckc
Copy link

ruckc commented Oct 9, 2024

ideally jupyterlab/ipywidgets/krb5 stuff should be optional group dependencies that can be installed like pip install arcgis[krb5,jupyter] to not bloat the basic installation when I only need it to interact with a non-kerberos ArcGIS Portal.

It's ridiculous that client-side/presentation dependencies are included for just using REST apis.

@nanaeaubry
Copy link
Contributor

@ruckc The jupyterlab/ipywidgets depedencies are no longer part of the arcgis package. However if you want to use mapping then yes you need them for the arcgis-mapping package. We are working on doing this with other aspects of the api as well

@ruckc
Copy link

ruckc commented Oct 9, 2024

@nanaeaubry - that is good to know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants