pip icon indicating copy to clipboard operation
pip copied to clipboard

Examples of `ResolutionTooDeep` in Pip

Open notatallshaw opened this issue 9 months ago • 50 comments

Collecting Examples of ResolutionTooDeep in Pip

This post is not for help, but for collecting examples of where Pip's resolver fails with ResolutionTooDeep. Your contributions will help test future improvements to the resolver's behavior.

What to Include

When submitting an example, please provide the following:

  1. Pip version (pip --version)
  2. Python version (python --version)
  3. Operating System
  4. Output of pip freeze
  5. The exact command that produced the error
  6. Contents of any pyproject.toml, requirements.txt, or other relevant files (if applicable)
    • For pyproject.toml, please include the dependencies value from the [project] section.
    • If the files are too long, you can upload them to a GitHub Gist and share the link.
    • Alternatively, write out any additional steps needed to reproduce the issue.

📝 Example Submission

Pip version: 24.0
Python version: 3.11.6
OS: Ubuntu 22.04

$ pip install mypackage

Output:
ERROR: ResolutionTooDeep: xxx

Output of `pip freeze`:
package-a==1.2.3
package-b==4.5.6
...

Contents of `pyproject.toml`:

[project]
dependencies = [
    "package-a==1.2.3",
    "package-b==4.5.6"
]

(Or link to Gist: https://gist.github.com/your-gist)

Why This Matters

By collecting real-world examples, we can better understand when and why the resolver goes too deep and improve Pip's behavior.

Thank you for helping us make Pip better!

Alternative Solutions

If you need a solution right now you might want to try uv which has a uv pip interface that is similar to pip with a powerful resolver, but there are some compatibility differences.

notatallshaw avatar Mar 16 '25 03:03 notatallshaw

Pip version (pip --version): 25.1

Python version (python --version) 3.12.10: Actually: docker pull python:3.12-slim-bookworm@sha256:85824326bc4ae27a1abb5bc0dd9e08847aa5fe73d8afb593b1b45b7cb4180f57

Operating System: debian bookworm

Output of pip freeze: nothing installed.

The exact command that produced the error: Below - but the command requires a series of steps to build the packages locally - they are shown in the failing CI job, I can help with enumerating steps if needed.

Contents of any pyproject.toml, requirements.txt, or other relevant files (if applicable): no pyproject.toml used in this case - though all packages above were building using the 60+ pyproject.toml in Airflow `main`.

Only Python 3.12 fails Other images built properly.

Example failure: https://github.com/apache/airflow/actions/runs/14692610732/job/41231149374#step:9:130

Attempting to see if https://github.com/apache/airflow/pull/49853 would help:

Image

Command:

pip install --root-user-action ignore 'apache-airflow[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv] @ file:///docker-context-files/apache_airflow-3.1.0-py3-none-any.whl' 'apache-airflow-core @ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl' 'apache-airflow-providers-amazon @ file:///docker-context-files/apache_airflow_providers_amazon-9.6.1-py3-none-any.whl' 'apache-airflow-providers-celery @ file:///docker-context-files/apache_airflow_providers_celery-3.10.6-py3-none-any.whl' 'apache-airflow-providers-cncf-kubernetes @ file:///docker-context-files/apache_airflow_providers_cncf_kubernetes-10.4.3-py3-none-any.whl' 'apache-airflow-providers-common-compat @ file:///docker-context-files/apache_airflow_providers_common_compat-1.6.1-py3-none-any.whl' 'apache-airflow-providers-common-io @ file:///docker-context-files/apache_airflow_providers_common_io-1.5.4-py3-none-any.whl' 'apache-airflow-providers-common-messaging @ file:///docker-context-files/apache_airflow_providers_common_messaging-1.0.0-py3-none-any.whl' 'apache-airflow-providers-common-sql @ file:///docker-context-files/apache_airflow_providers_common_sql-1.26.0-py3-none-any.whl' 'apache-airflow-providers-docker @ file:///docker-context-files/apache_airflow_providers_docker-4.3.1-py3-none-any.whl' 'apache-airflow-providers-elasticsearch @ file:///docker-context-files/apache_airflow_providers_elasticsearch-6.2.2-py3-none-any.whl' 'apache-airflow-providers-fab @ file:///docker-context-files/apache_airflow_providers_fab-2.0.2-py3-none-any.whl' 'apache-airflow-providers-ftp @ file:///docker-context-files/apache_airflow_providers_ftp-3.12.3-py3-none-any.whl' 'apache-airflow-providers-git @ file:///docker-context-files/apache_airflow_providers_git-0.0.2-py3-none-any.whl' 'apache-airflow-providers-google @ file:///docker-context-files/apache_airflow_providers_google-15.1.0-py3-none-any.whl' 'apache-airflow-providers-grpc @ file:///docker-context-files/apache_airflow_providers_grpc-3.7.3-py3-none-any.whl' 'apache-airflow-providers-hashicorp @ file:///docker-context-files/apache_airflow_providers_hashicorp-4.1.1-py3-none-any.whl' 'apache-airflow-providers-http @ file:///docker-context-files/apache_airflow_providers_http-5.2.2-py3-none-any.whl' 'apache-airflow-providers-microsoft-azure @ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl' 'apache-airflow-providers-mysql @ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl' 'apache-airflow-providers-odbc @ file:///docker-context-files/apache_airflow_providers_odbc-4.9.2-py3-none-any.whl' 'apache-airflow-providers-openlineage @ file:///docker-context-files/apache_airflow_providers_openlineage-2.2.0-py3-none-any.whl' 'apache-airflow-providers-postgres @ file:///docker-context-files/apache_airflow_providers_postgres-6.1.3-py3-none-any.whl' 'apache-airflow-providers-redis @ file:///docker-context-files/apache_airflow_providers_redis-4.0.2-py3-none-any.whl' 'apache-airflow-providers-sendgrid @ file:///docker-context-files/apache_airflow_providers_sendgrid-4.0.1-py3-none-any.whl' 'apache-airflow-providers-sftp @ file:///docker-context-files/apache_airflow_providers_sftp-5.2.1-py3-none-any.whl' 'apache-airflow-providers-slack @ file:///docker-context-files/apache_airflow_providers_slack-9.0.5-py3-none-any.whl' 'apache-airflow-providers-smtp @ file:///docker-context-files/apache_airflow_providers_smtp-2.0.3-py3-none-any.whl' 'apache-airflow-providers-snowflake @ file:///docker-context-files/apache_airflow_providers_snowflake-6.2.2-py3-none-any.whl' 'apache-airflow-providers-ssh @ file:///docker-context-files/apache_airflow_providers_ssh-4.0.1-py3-none-any.whl' 'apache-airflow-providers-standard @ file:///docker-context-files/apache_airflow_providers_standard-1.1.0-py3-none-any.whl' 'apache-airflow-task-sdk @ file:///docker-context-files/apache_airflow_task_sdk-1.1.0-py3-none-any.whl /docker-context-files/apache_airflow-3.1.0-py3-none-any.whl (from apache-airflow[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv]@ file:///docker-context-files/apache_airflow-3.1.0-py3-none-any.whl

The most interesting part of the output is:

 #57 33.53 Collecting opentelemetry-exporter-otlp-proto-http==1.24.0 (from opentelemetry-exporter-otlp>=1.24.0->apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 33.55   Downloading opentelemetry_exporter_otlp_proto_http-1.24.0-py3-none-any.whl.metadata (2.1 kB)
  #57 33.57 Collecting opentelemetry-exporter-otlp-proto-common==1.24.0 (from opentelemetry-exporter-otlp-proto-grpc==1.24.0->opentelemetry-exporter-otlp>=1.24.0->apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 33.59   Downloading opentelemetry_exporter_otlp_proto_common-1.24.0-py3-none-any.whl.metadata (1.7 kB)
  #57 33.59 Collecting opentelemetry-proto==1.24.0 (from opentelemetry-exporter-otlp-proto-grpc==1.24.0->opentelemetry-exporter-otlp>=1.24.0->apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 33.61   Downloading opentelemetry_proto-1.24.0-py3-none-any.whl.metadata (2.2 kB)
  #57 33.62 Collecting importlib-metadata<8.7.0,>=6.0 (from opentelemetry-api>=1.24.0->apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 33.64   Downloading importlib_metadata-8.6.0-py3-none-any.whl.metadata (4.7 kB)
  #57 33.84 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 34.24   Downloading importlib_metadata-8.5.0-py3-none-any.whl.metadata (4.8 kB)
  #57 34.77 INFO: pip is still looking at multiple versions of opentelemetry-exporter-otlp-proto-grpc to determine which version is compatible with other requirements. This could take a while.
  #57 34.81   Downloading importlib_metadata-8.4.0-py3-none-any.whl.metadata (4.7 kB)
  #57 35.38   Downloading importlib_metadata-8.3.0-py3-none-any.whl.metadata (4.7 kB)
  #57 35.90 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 35.96   Downloading importlib_metadata-8.2.0-py3-none-any.whl.metadata (4.7 kB)
  #57 36.53   Downloading importlib_metadata-8.1.0-py3-none-any.whl.metadata (4.7 kB)
  #57 37.10   Downloading importlib_metadata-8.0.0-py3-none-any.whl.metadata (4.6 kB)
  #57 37.67   Downloading importlib_metadata-7.2.1-py3-none-any.whl.metadata (4.6 kB)
  #57 38.24   Downloading importlib_metadata-7.2.0-py3-none-any.whl.metadata (4.7 kB)
  #57 38.81   Downloading importlib_metadata-7.1.0-py3-none-any.whl.metadata (4.7 kB)
  #57 39.38   Downloading importlib_metadata-7.0.2-py3-none-any.whl.metadata (4.6 kB)
  #57 39.95   Downloading importlib_metadata-7.0.1-py3-none-any.whl.metadata (4.9 kB)
  #57 40.52   Downloading importlib_metadata-7.0.0-py3-none-any.whl.metadata (4.9 kB)
  #57 41.10   Downloading importlib_metadata-6.11.0-py3-none-any.whl.metadata (4.9 kB)
  #57 41.67   Downloading importlib_metadata-6.10.0-py3-none-any.whl.metadata (4.9 kB)
  #57 42.24   Downloading importlib_metadata-6.9.0-py3-none-any.whl.metadata (4.9 kB)
  #57 42.81   Downloading importlib_metadata-6.8.0-py3-none-any.whl.metadata (5.1 kB)
  #57 43.39   Downloading importlib_metadata-6.7.0-py3-none-any.whl.metadata (4.9 kB)
  #57 43.96   Downloading importlib_metadata-6.6.0-py3-none-any.whl.metadata (5.0 kB)
  #57 44.53   Downloading importlib_metadata-6.5.1-py3-none-any.whl.metadata (5.0 kB)
  #57 45.11   Downloading importlib_metadata-6.5.0-py3-none-any.whl.metadata (5.0 kB)
  #57 45.68   Downloading importlib_metadata-6.4.1-py3-none-any.whl.metadata (5.0 kB)
  #57 46.25   Downloading importlib_metadata-6.4.0-py3-none-any.whl.metadata (5.0 kB)
  #57 46.83   Downloading importlib_metadata-6.3.0-py3-none-any.whl.metadata (5.0 kB)
  #57 47.39   Downloading importlib_metadata-6.2.1-py3-none-any.whl.metadata (5.0 kB)
  #57 47.97   Downloading importlib_metadata-6.2.0-py3-none-any.whl.metadata (5.0 kB)
  #57 48.55   Downloading importlib_metadata-6.1.0-py3-none-any.whl.metadata (5.0 kB)
  #57 49.12   Downloading importlib_metadata-6.0.1-py3-none-any.whl.metadata (5.0 kB)
  #57 49.69   Downloading importlib_metadata-6.0.0-py3-none-any.whl.metadata (5.0 kB)
  #57 50.25 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 50.27   Downloading opentelemetry_api-1.32.0-py3-none-any.whl.metadata (1.6 kB)
  #57 50.28 INFO: pip is looking at multiple versions of opentelemetry-sdk to determine which version is compatible with other requirements. This could take a while.
  #57 50.28 Collecting opentelemetry-sdk>=1.27.0 (from microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 50.30   Downloading opentelemetry_sdk-1.32.0-py3-none-any.whl.metadata (1.6 kB)
  #57 50.32 Collecting opentelemetry-semantic-conventions==0.53b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 50.34   Downloading opentelemetry_semantic_conventions-0.53b0-py3-none-any.whl.metadata (2.5 kB)
  #57 53.62 INFO: pip is still looking at multiple versions of opentelemetry-sdk to determine which version is compatible with other requirements. This could take a while.
  #57 56.28 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 66.41 Collecting openlineage-integration-common>=1.31.0 (from apache-airflow-providers-openlineage@ file:///docker-context-files/apache_airflow_providers_openlineage-2.2.0-py3-none-any.whl)
  #57 66.43   Downloading openlineage_integration_common-1.31.0-py3-none-any.whl.metadata (3.8 kB)
  #57 66.49 Collecting openlineage-python>=1.31.0 (from apache-airflow-providers-openlineage@ file:///docker-context-files/apache_airflow_providers_openlineage-2.2.0-py3-none-any.whl)
  #57 66.51   Downloading openlineage_python-1.31.0-py3-none-any.whl.metadata (1.9 kB)
  #57 66.52 Collecting openlineage-sql==1.31.0 (from openlineage-integration-common>=1.31.0->apache-airflow-providers-openlineage@ file:///docker-context-files/apache_airflow_providers_openlineage-2.2.0-py3-none-any.whl)
  #57 66.54   Downloading openlineage_sql-1.31.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (957 bytes)
  #57 83.98 Collecting mysqlclient>=1.4.0 (from apache-airflow-providers-mysql@ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl)
  #57 84.00   Downloading mysqlclient-2.2.6.tar.gz (91 kB)
  #57 84.02   Installing build dependencies: started
  #57 85.11   Installing build dependencies: finished with status 'done'
  #57 85.11   Getting requirements to build wheel: started
  #57 86.04   Getting requirements to build wheel: finished with status 'done'
  #57 86.04   Preparing metadata (pyproject.toml): started
  #57 86.66   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 87.92   Downloading mysqlclient-2.2.5.tar.gz (90 kB)
  #57 87.94   Installing build dependencies: started
  #57 89.03   Installing build dependencies: finished with status 'done'
  #57 89.04   Getting requirements to build wheel: started
  #57 89.92   Getting requirements to build wheel: finished with status 'done'
  #57 89.92   Preparing metadata (pyproject.toml): started
  #57 90.53   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 91.93   Downloading mysqlclient-2.2.4.tar.gz (90 kB)
  #57 91.95   Installing build dependencies: started
  #57 93.03   Installing build dependencies: finished with status 'done'
  #57 93.03   Getting requirements to build wheel: started
  #57 93.92   Getting requirements to build wheel: finished with status 'done'
  #57 93.92   Preparing metadata (pyproject.toml): started
  #57 94.54   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 95.72   Downloading mysqlclient-2.2.3.tar.gz (90 kB)
  #57 95.74   Installing build dependencies: started
  #57 96.83   Installing build dependencies: finished with status 'done'
  #57 96.83   Getting requirements to build wheel: started
  #57 97.71   Getting requirements to build wheel: finished with status 'done'
  #57 97.71   Preparing metadata (pyproject.toml): started
  #57 98.33   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 99.51   Downloading mysqlclient-2.2.2.tar.gz (90 kB)
  #57 99.53   Installing build dependencies: started
  #57 100.6   Installing build dependencies: finished with status 'done'
  #57 100.6   Getting requirements to build wheel: started
  #57 101.5   Getting requirements to build wheel: finished with status 'done'
  #57 101.5   Preparing metadata (pyproject.toml): started
  #57 102.1   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 103.3   Downloading mysqlclient-2.2.1.tar.gz (89 kB)
  #57 103.3   Installing build dependencies: started
  #57 104.4   Installing build dependencies: finished with status 'done'
  #57 104.4   Getting requirements to build wheel: started
  #57 105.3   Getting requirements to build wheel: finished with status 'done'
  #57 105.3   Preparing metadata (pyproject.toml): started
  #57 105.9   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 107.1   Downloading mysqlclient-2.2.0.tar.gz (89 kB)
  #57 107.2   Installing build dependencies: started
  #57 108.3   Installing build dependencies: finished with status 'done'
  #57 108.3   Getting requirements to build wheel: started
  #57 109.1   Getting requirements to build wheel: finished with status 'done'
  #57 109.1   Preparing metadata (pyproject.toml): started
  #57 109.8   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 111.0   Downloading mysqlclient-2.1.1.tar.gz (88 kB)
  #57 111.0   Installing build dependencies: started
  #57 112.1   Installing build dependencies: finished with status 'done'
  #57 112.1   Getting requirements to build wheel: started
  #57 112.8   Getting requirements to build wheel: finished with status 'done'
  #57 112.8   Preparing metadata (pyproject.toml): started
  #57 113.3   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 114.5   Downloading mysqlclient-2.1.0.tar.gz (87 kB)
  #57 114.5   Installing build dependencies: started
  #57 115.6   Installing build dependencies: finished with status 'done'
  #57 115.6   Getting requirements to build wheel: started
  #57 116.3   Getting requirements to build wheel: finished with status 'done'
  #57 116.3   Preparing metadata (pyproject.toml): started
  #57 116.9   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 118.0   Downloading mysqlclient-2.0.3.tar.gz (88 kB)
  #57 118.1   Installing build dependencies: started
  #57 119.2   Installing build dependencies: finished with status 'done'
  #57 119.2   Getting requirements to build wheel: started
  #57 119.8   Getting requirements to build wheel: finished with status 'done'
  #57 119.8   Preparing metadata (pyproject.toml): started
  #57 120.4   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 121.6   Downloading mysqlclient-2.0.2.tar.gz (88 kB)
  #57 121.6   Installing build dependencies: started
  #57 122.7   Installing build dependencies: finished with status 'done'
  #57 122.7   Getting requirements to build wheel: started
  #57 123.4   Getting requirements to build wheel: finished with status 'done'
  #57 123.4   Preparing metadata (pyproject.toml): started
  #57 124.0   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 125.1   Downloading mysqlclient-2.0.1.tar.gz (87 kB)
  #57 125.2   Installing build dependencies: started
  #57 126.3   Installing build dependencies: finished with status 'done'
  #57 126.3   Getting requirements to build wheel: started
  #57 126.9   Getting requirements to build wheel: finished with status 'done'
  #57 126.9   Preparing metadata (pyproject.toml): started
  #57 127.5   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 128.7   Downloading mysqlclient-2.0.0.tar.gz (87 kB)
  #57 128.7   Installing build dependencies: started
  #57 129.8   Installing build dependencies: finished with status 'done'
  #57 129.8   Getting requirements to build wheel: started
  #57 130.5   Getting requirements to build wheel: finished with status 'done'
  #57 130.5   Preparing metadata (pyproject.toml): started
  #57 131.1   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 132.2   Downloading mysqlclient-1.4.6.tar.gz (85 kB)
  #57 132.2   Installing build dependencies: started
  #57 133.3   Installing build dependencies: finished with status 'done'
  #57 133.3   Getting requirements to build wheel: started
  #57 134.0   Getting requirements to build wheel: finished with status 'done'
  #57 134.0   Preparing metadata (pyproject.toml): started
  #57 134.6   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 135.8   Downloading mysqlclient-1.4.5.tar.gz (86 kB)
  #57 135.8   Installing build dependencies: started
  #57 136.9   Installing build dependencies: finished with status 'done'
  #57 136.9   Getting requirements to build wheel: started
  #57 137.6   Getting requirements to build wheel: finished with status 'done'
  #57 137.6   Preparing metadata (pyproject.toml): started
  #57 138.1   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 139.3   Downloading mysqlclient-1.4.4.tar.gz (86 kB)
  #57 139.3   Installing build dependencies: started
  #57 140.4   Installing build dependencies: finished with status 'done'
  #57 140.4   Getting requirements to build wheel: started
  #57 141.1   Getting requirements to build wheel: finished with status 'done'
  #57 141.1   Preparing metadata (pyproject.toml): started
  #57 141.7   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 142.9   Downloading mysqlclient-1.4.3.tar.gz (86 kB)
  #57 142.9   Installing build dependencies: started
  #57 144.0   Installing build dependencies: finished with status 'done'
  #57 144.0   Getting requirements to build wheel: started
  #57 144.7   Getting requirements to build wheel: finished with status 'done'
  #57 144.7   Preparing metadata (pyproject.toml): started
  #57 145.2   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 146.4   Downloading mysqlclient-1.4.2.post1.tar.gz (85 kB)
  #57 146.4   Installing build dependencies: started
  #57 147.6   Installing build dependencies: finished with status 'done'
  #57 147.6   Getting requirements to build wheel: started
  #57 148.3   Getting requirements to build wheel: finished with status 'done'
  #57 148.3   Preparing metadata (pyproject.toml): started
  #57 148.8   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 150.0   Downloading mysqlclient-1.4.2.tar.gz (85 kB)
  #57 150.0   Installing build dependencies: started
  #57 151.1   Installing build dependencies: finished with status 'done'
  #57 151.1   Getting requirements to build wheel: started
  #57 151.8   Getting requirements to build wheel: finished with status 'done'
  #57 151.8   Preparing metadata (pyproject.toml): started
  #57 152.3   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 153.5   Downloading mysqlclient-1.4.1.tar.gz (85 kB)
  #57 153.5   Installing build dependencies: started
  #57 154.6   Installing build dependencies: finished with status 'done'
  #57 154.6   Getting requirements to build wheel: started
  #57 155.3   Getting requirements to build wheel: finished with status 'done'
  #57 155.3   Preparing metadata (pyproject.toml): started
  #57 155.9   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 157.1   Downloading mysqlclient-1.4.0.tar.gz (85 kB)
  #57 157.1   Installing build dependencies: started
  #57 158.2   Installing build dependencies: finished with status 'done'
  #57 158.2   Getting requirements to build wheel: started
  #57 158.9   Getting requirements to build wheel: finished with status 'done'
  #57 158.9   Preparing metadata (pyproject.toml): started
  #57 159.4   Preparing metadata (pyproject.toml): finished with status 'done'
  #57 859.1 Collecting mysql-connector-python>=8.0.29 (from apache-airflow-providers-mysql@ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl)
  #57 859.2   Downloading mysql_connector_python-9.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 883.8   Downloading mysql_connector_python-9.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 908.6   Downloading mysql_connector_python-9.0.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.0 kB)
  #57 933.2   Downloading mysql_connector_python-8.4.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 958.2   Downloading mysql_connector_python-8.3.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 983.0   Downloading mysql_connector_python-8.2.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.1 kB)
  #57 983.0 INFO: pip is looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 983.0   Downloading mysql_connector_python-8.1.0-py2.py3-none-any.whl.metadata (2.0 kB)
  #57 983.1   Downloading mysql_connector_python-8.0.33-py2.py3-none-any.whl.metadata (1.8 kB)
  #57 983.1   Downloading mysql_connector_python-8.0.32-py2.py3-none-any.whl.metadata (1.8 kB)
  #57 983.1   Downloading mysql_connector_python-8.0.31-py2.py3-none-any.whl.metadata (1.8 kB)
  #57 983.2   Downloading mysql_connector_python-8.0.30-py2.py3-none-any.whl.metadata (1.8 kB)
  #57 983.2   Downloading mysql_connector_python-8.0.29-py2.py3-none-any.whl.metadata (1.7 kB)
  #57 1008.3 INFO: pip is still looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 1849.8 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 2848.4 error: resolution-too-deep
  #57 2848.4 
  #57 2848.4 × Dependency resolution exceeded maximum depth
  #57 2848.4 ╰─> Pip cannot resolve the current dependencies as the dependency graph is too complex for pip to solve efficiently.
  #57 2848.4 

potiuk avatar Apr 27 '25 16:04 potiuk

Thanks, I'll take a look as soon as I can, probably later today.

notatallshaw avatar Apr 27 '25 16:04 notatallshaw

I see you have applied a workaround, which is good because I think it might take me a little time and understanding your build system to produce an MRE, as testing with the latest releases packages it doesn't appear to hit this:

$ pip install --dry-run apache-airflow[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv]==3.0.0 apache-airflow-core==3.0.0 apache-airflow-providers-amazon==9.6.1 apache-airflow-providers-celery==3.10.6 apache-airflow-providers-cncf-kubernetes==10.4.3 apache-airflow-providers-common-compat==1.6.0 apache-airflow-providers-common-io==1.5.4 apache-airflow-providers-common-messaging==1.0.0 apache-airflow-providers-common-sql==1.26.0 apache-airflow-providers-docker==4.3.1 apache-airflow-providers-elasticsearch==6.2.2 apache-airflow-providers-fab==2.0.1 apache-airflow-providers-ftp==3.12.3 apache-airflow-providers-git==0.0.2 apache-airflow-providers-google==15.1.0 apache-airflow-providers-grpc==3.7.3 apache-airflow-providers-hashicorp==4.1.1 apache-airflow-providers-http==5.2.2 apache-airflow-providers-microsoft-azure==12.3.1 apache-airflow-providers-mysql==6.2.2 apache-airflow-providers-odbc==4.9.2 apache-airflow-providers-openlineage==2.2.0 apache-airflow-providers-postgres==6.1.3 apache-airflow-providers-redis==4.0.2 apache-airflow-providers-sendgrid==4.0.1 apache-airflow-providers-sftp==5.2.1 apache-airflow-providers-slack==9.0.5 apache-airflow-providers-smtp==2.0.3 apache-airflow-providers-snowflake==6.2.2 apache-airflow-providers-ssh==4.0.1 apache-airflow-providers-standard==1.0.0 apache-airflow-task-sdk==1.0.0

...

Would install Authlib-1.5.2 Deprecated-1.2.18 Flask-2.2.5 Flask-AppBuilder-4.5.3 Flask-Babel-2.0.0 Flask-JWT-Extended-4.7.1 Flask-Limiter-3.12 Flask-Login-0.6.3 Flask-SQLAlchemy-2.5.1 Flask-Session-0.5.0 Flask-WTF-1.2.2 GitPython-3.1.44 Jinja2-3.1.6 Mako-1.3.10 MarkupSafe-3.0.2 PyAthena-3.13.0 PyJWT-2.10.1 PyMySQL-1.1.1 PyNaCl-1.5.0 PyYAML-6.0.2 Pygments-2.19.1 SQLAlchemy-1.4.54 SQLAlchemy-JSONField-1.0.2 SQLAlchemy-Utils-0.41.2 WTForms-3.2.1 Werkzeug-2.2.3 a2wsgi-1.10.8 adal-1.2.7 adlfs-2024.12.0 aiobotocore-2.21.1 aiofiles-24.1.0 aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aioitertools-0.12.0 aiologic-0.14.0 aiomysql-0.2.0 aiosignal-1.3.2 aiosqlite-0.21.0 alembic-1.15.2 amqp-5.3.1 annotated-types-0.7.0 anyio-4.9.0 apache-airflow-3.0.0 apache-airflow-core-3.0.0 apache-airflow-providers-amazon-9.6.1 apache-airflow-providers-celery-3.10.6 apache-airflow-providers-cncf-kubernetes-10.4.3 apache-airflow-providers-common-compat-1.6.0 apache-airflow-providers-common-io-1.5.4 apache-airflow-providers-common-messaging-1.0.0 apache-airflow-providers-common-sql-1.26.0 apache-airflow-providers-docker-4.3.1 apache-airflow-providers-elasticsearch-6.2.2 apache-airflow-providers-fab-2.0.1 apache-airflow-providers-ftp-3.12.3 apache-airflow-providers-git-0.0.2 apache-airflow-providers-google-15.1.0 apache-airflow-providers-grpc-3.7.3 apache-airflow-providers-hashicorp-4.1.1 apache-airflow-providers-http-5.2.2 apache-airflow-providers-microsoft-azure-12.3.1 apache-airflow-providers-mysql-6.2.2 apache-airflow-providers-odbc-4.9.2 apache-airflow-providers-openlineage-2.2.0 apache-airflow-providers-postgres-6.1.3 apache-airflow-providers-redis-4.0.2 apache-airflow-providers-sendgrid-4.0.1 apache-airflow-providers-sftp-5.2.1 apache-airflow-providers-slack-9.0.5 apache-airflow-providers-smtp-2.0.3 apache-airflow-providers-snowflake-6.2.2 apache-airflow-providers-ssh-4.0.1 apache-airflow-providers-standard-1.0.0 apache-airflow-task-sdk-1.0.0 apispec-6.8.1 argcomplete-3.6.2 asgiref-3.8.1 asn1crypto-1.5.1 asyncpg-0.30.0 asyncssh-2.20.0 attrs-25.3.0 azure-batch-14.2.0 azure-common-1.1.28 azure-core-1.33.0 azure-cosmos-4.9.0 azure-datalake-store-0.0.53 azure-identity-1.21.0 azure-keyvault-secrets-4.9.0 azure-kusto-data-5.0.2 azure-mgmt-containerinstance-10.1.0 azure-mgmt-containerregistry-13.0.0 azure-mgmt-core-1.5.0 azure-mgmt-cosmosdb-9.7.0 azure-mgmt-datafactory-9.2.0 azure-mgmt-datalake-nspkg-3.0.1 azure-mgmt-datalake-store-0.5.0 azure-mgmt-nspkg-3.0.2 azure-mgmt-resource-23.3.0 azure-mgmt-storage-22.2.0 azure-nspkg-3.0.2 azure-servicebus-7.14.2 azure-storage-blob-12.25.1 azure-storage-file-datalake-12.20.0 azure-storage-file-share-12.21.0 azure-synapse-artifacts-0.20.0 azure-synapse-spark-0.7.0 babel-2.17.0 backoff-2.2.1 bcrypt-4.3.0 beautifulsoup4-4.13.4 billiard-4.2.1 blinker-1.9.0 boto3-1.37.1 botocore-1.37.1 cachelib-0.13.0 cachetools-5.5.2 cadwyn-5.3.3 cattrs-24.1.3 celery-5.5.2 certifi-2025.4.26 cffi-1.17.1 chardet-5.2.0 charset-normalizer-3.4.1 click-8.1.8 click-didyoumean-0.3.1 click-plugins-1.1.1 click-repl-0.3.0 clickclick-20.10.2 colorama-0.4.6 colorlog-6.9.0 connexion-2.14.2 cron-descriptor-1.4.5 croniter-6.0.0 cryptography-44.0.2 db-dtypes-1.4.2 decorator-5.2.1 dill-0.4.0 dnspython-2.7.0 docker-7.1.0 docstring_parser-0.16 durationpy-0.9 elastic-transport-8.17.1 elasticsearch-8.18.0 email_validator-2.2.0 eventlet-0.39.1 fastapi-0.115.12 fastapi-cli-0.0.7 filelock-3.18.0 flower-2.0.1 frozenlist-1.6.0 fsspec-2025.3.2 gcloud-aio-auth-5.4.1 gcloud-aio-bigquery-7.1.0 gcloud-aio-storage-9.4.0 gcsfs-2025.3.2 gevent-25.4.2 gitdb-4.0.12 google-ads-26.1.0 google-analytics-admin-0.24.0 google-api-core-2.24.2 google-api-python-client-2.168.0 google-auth-2.39.0 google-auth-httplib2-0.2.0 google-auth-oauthlib-1.2.2 google-cloud-aiplatform-1.90.0 google-cloud-alloydb-0.4.5 google-cloud-appengine-logging-1.6.1 google-cloud-audit-log-0.3.2 google-cloud-automl-2.16.3 google-cloud-batch-0.17.35 google-cloud-bigquery-3.31.0 google-cloud-bigquery-datatransfer-3.19.1 google-cloud-bigtable-2.30.1 google-cloud-build-3.31.1 google-cloud-compute-1.30.0 google-cloud-container-2.56.1 google-cloud-core-2.4.3 google-cloud-datacatalog-3.27.0 google-cloud-dataflow-client-0.8.17 google-cloud-dataform-0.6.1 google-cloud-dataplex-2.10.1 google-cloud-dataproc-5.18.1 google-cloud-dataproc-metastore-1.18.2 google-cloud-dlp-3.29.0 google-cloud-kms-3.4.1 google-cloud-language-2.17.1 google-cloud-logging-3.12.1 google-cloud-managedkafka-0.1.9 google-cloud-memcache-1.12.1 google-cloud-monitoring-2.27.1 google-cloud-orchestration-airflow-1.17.5 google-cloud-os-login-2.17.1 google-cloud-pubsub-2.29.0 google-cloud-redis-2.18.1 google-cloud-resource-manager-1.14.2 google-cloud-run-0.10.17 google-cloud-secret-manager-2.23.3 google-cloud-spanner-3.53.0 google-cloud-speech-2.32.0 google-cloud-storage-2.19.0 google-cloud-storage-transfer-1.16.1 google-cloud-tasks-2.19.2 google-cloud-texttospeech-2.26.0 google-cloud-translate-3.20.2 google-cloud-videointelligence-2.16.1 google-cloud-vision-3.10.1 google-cloud-workflows-1.18.1 google-crc32c-1.7.1 google-resumable-media-2.7.2 googleapis-common-protos-1.70.0 graphviz-0.20.3 greenlet-3.2.1 grpc-google-iam-v1-0.14.2 grpc-interceptor-0.15.4 grpcio-1.71.0 grpcio-gcp-0.2.2 grpcio-status-1.71.0 gunicorn-23.0.0 h11-0.16.0 h2-4.2.0 hpack-4.1.0 httpcore-1.0.9 httplib2-0.22.0 httptools-0.6.4 httpx-0.28.1 humanize-4.12.2 hvac-2.3.0 hyperframe-6.1.0 idna-3.10 ijson-3.3.0 immutabledict-4.2.1 importlib_metadata-8.6.1 inflection-0.5.1 isodate-0.7.2 itsdangerous-2.2.0 jmespath-1.0.1 joblib-1.4.2 jsonpath-ng-1.7.0 jsonschema-4.23.0 jsonschema-specifications-2025.4.1 kombu-5.5.3 kubernetes-31.0.0 kubernetes_asyncio-30.3.1 lazy-object-proxy-1.11.0 libcst-1.7.0 limits-5.1.0 linkify-it-py-2.0.3 lockfile-0.12.2 looker-sdk-25.4.0 lxml-5.4.0 markdown-it-py-3.0.0 marshmallow-3.26.1 marshmallow-sqlalchemy-0.28.2 mdurl-0.1.2 methodtools-0.4.7 microsoft-kiota-abstractions-1.9.3 microsoft-kiota-authentication-azure-1.9.3 microsoft-kiota-http-1.9.3 microsoft-kiota-serialization-json-1.9.3 microsoft-kiota-serialization-text-1.9.3 more-itertools-10.7.0 msal-1.32.3 msal-extensions-1.3.1 msgraph-core-1.3.3 msgspec-0.19.0 msrest-0.7.1 msrestazure-0.6.4.post1 multidict-6.4.3 mysql-connector-python-9.3.0 mysqlclient-2.2.7 numpy-1.26.4 oauthlib-3.2.2 openlineage-integration-common-1.32.0 openlineage-python-1.32.0 openlineage_sql-1.32.0 opentelemetry-api-1.32.1 opentelemetry-exporter-otlp-1.32.1 opentelemetry-exporter-otlp-proto-common-1.32.1 opentelemetry-exporter-otlp-proto-grpc-1.32.1 opentelemetry-exporter-otlp-proto-http-1.32.1 opentelemetry-proto-1.32.1 opentelemetry-sdk-1.32.1 opentelemetry-semantic-conventions-0.53b1 ordered-set-4.1.0 packaging-25.0 pandas-2.1.4 pandas-gbq-0.28.0 paramiko-3.5.1 pathspec-0.12.1 pendulum-3.1.0 platformdirs-4.3.7 pluggy-1.5.0 ply-3.11 prison-0.2.1 prometheus_client-0.21.1 prompt_toolkit-3.0.51 propcache-0.3.1 proto-plus-1.26.1 protobuf-5.29.4 psutil-7.0.0 psycopg2-binary-2.9.10 pyOpenSSL-25.0.0 pyarrow-20.0.0 pyasn1-0.6.1 pyasn1_modules-0.4.1 pycparser-2.22 pydantic-2.11.3 pydantic_core-2.33.1 pydata-google-auth-1.9.1 pyodbc-5.2.0 pyparsing-3.2.3 python-daemon-3.1.2 python-dateutil-2.9.0.post0 python-dotenv-1.1.0 python-http-client-3.3.7 python-ldap-3.4.4 python-multipart-0.0.20 python-slugify-8.0.4 python3-saml-1.16.0 pytz-2025.2 redis-5.2.1 redshift-connector-2.1.5 referencing-0.36.2 requests-2.32.3 requests-oauthlib-2.0.0 requests-toolbelt-1.0.0 retryhttp-1.3.2 rich-13.9.4 rich-argparse-1.7.0 rich-toolkit-0.14.3 rpds-py-0.24.0 rsa-4.9.1 ruamel.yaml-0.18.10 ruamel.yaml.clib-0.2.12 s3transfer-0.11.3 sagemaker_studio-1.0.13 scikit-learn-1.6.1 scipy-1.15.2 scramp-1.4.5 sendgrid-6.11.0 setproctitle-1.3.5 setuptools-80.0.0 shapely-2.1.0 shellingham-1.5.4 six-1.17.0 slack_sdk-3.35.0 smmap-5.0.2 sniffio-1.3.1 snowflake-connector-python-3.14.1 snowflake-sqlalchemy-1.7.3 sortedcontainers-2.4.0 soupsieve-2.7 sqlalchemy-bigquery-1.13.0 sqlalchemy-spanner-1.10.0 sqlparse-0.5.3 sshtunnel-0.4.0 starkbank-ecdsa-2.2.0 starlette-0.46.2 statsd-4.0.1 std-uritemplate-2.0.3 structlog-25.3.0 svcs-25.1.0 tabulate-0.9.0 tenacity-9.1.2 termcolor-3.0.1 text-unidecode-1.3 threadpoolctl-3.6.0 tomlkit-0.13.2 tornado-6.4.2 tqdm-4.67.1 typer-0.15.2 types-protobuf-5.29.1.20250403 types-requests-2.32.0.20250328 typing-inspection-0.4.0 typing_extensions-4.13.2 tzdata-2025.2 uc-micro-py-1.0.3 universal_pathlib-0.2.6 uritemplate-4.1.1 urllib3-2.4.0 uuid6-2024.7.10 uv-0.6.17 uvicorn-0.34.2 uvloop-0.21.0 vine-5.1.0 watchfiles-1.0.5 watchtower-3.4.0 wcwidth-0.2.13 websocket-client-1.8.0 websockets-15.0.1 wirerope-1.0.0 wrapt-1.17.2 xmlsec-1.3.14 yarl-1.20.0 zipp-3.21.0 zope.event-5.0 zope.interface-7.2

notatallshaw avatar Apr 27 '25 22:04 notatallshaw

We actually have another iteration on that. Yesterday we started to hit another one (also only with Python 3.12):

https://github.com/apache/airflow/actions/runs/14698736309/job/41248421057

#57 174.8 Collecting mysql-connector-python>=8.2.0 (from apache-airflow-providers-mysql@ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl)#57 174.8 Collecting mysql-connector-python>=8.2.0 (from apache-airflow-providers-mysql@ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl)
  #57 174.8   Downloading mysql_connector_python-9.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 182.9   Downloading mysql_connector_python-9.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 191.1   Downloading mysql_connector_python-9.0.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.0 kB)
  #57 199.1   Downloading mysql_connector_python-8.4.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 207.1   Downloading mysql_connector_python-8.3.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 215.1   Downloading mysql_connector_python-8.2.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.1 kB)
  #57 215.2 INFO: pip is looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 888.5 INFO: pip is still looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 1305.2 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 1305.3 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 1305.4   Downloading opentelemetry_api-1.31.1-py3-none-any.whl.metadata (1.6 kB)
  #57 1305.4 Collecting opentelemetry-semantic-conventions==0.52b1 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1305.4   Downloading opentelemetry_semantic_conventions-0.52b1-py3-none-any.whl.metadata (2.5 kB)
  #57 1742.5 Collecting opentelemetry-sdk>=1.27.0 (from microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1742.6   Downloading opentelemetry_sdk-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #57 1742.7 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 1742.7   Downloading opentelemetry_api-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #57 1742.7 Collecting opentelemetry-semantic-conventions==0.52b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1742.7   Downloading opentelemetry_semantic_conventions-0.52b0-py3-none-any.whl.metadata (2.5 kB)
  #57 2059.3 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 2059.4   Downloading opentelemetry_api-1.30.0-py3-none-any.whl.metadata (1.6 kB)
  #57 2059.4 Collecting opentelemetry-semantic-conventions==0.51b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2059.4   Downloading opentelemetry_semantic_conventions-0.51b0-py3-none-any.whl.metadata (2.5 kB)
  #57 2236.9 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 2236.9   Downloading opentelemetry_api-1.29.0-py3-none-any.whl.metadata (1.4 kB)
  #57 2236.9 Collecting opentelemetry-semantic-conventions==0.50b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2237.0   Downloading opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl.metadata (2.3 kB)
  #57 2326.3 Collecting microsoft-kiota-authentication-azure<2.0.0,>=1.8.0 (from msgraph-core>=1.3.3->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2326.3   Downloading microsoft_kiota_authentication_azure-1.9.2-py3-none-any.whl.metadata (3.5 kB)
  #57 2444.4   Downloading microsoft_kiota_authentication_azure-1.9.1-py3-none-any.whl.metadata (3.5 kB)
  #57 2556.3   Downloading microsoft_kiota_authentication_azure-1.9.0-py3-none-any.whl.metadata (3.5 kB)
  #57 2668.9   Downloading microsoft_kiota_authentication_azure-1.8.0-py3-none-any.whl.metadata (3.5 kB)
  #57 2668.9 INFO: pip is looking at multiple versions of microsoft-kiota-authentication-azure to determine which version is compatible with other requirements. This could take a while.
  #57 2771.5 error: resolution-too-deep
  #57 2771.5 
  #57 2771.5 × Dependency resolution exceeded maximum depth
  #57 2771.5 ╰─> Pip cannot resolve the current dependencies as the dependency graph is too complex for pip to solve efficiently.
  #57 2771.5 
  #57 2771.5 hint: Try adding lower bounds to constrain your dependencies, for example: 'package>=2.0.0' instead of just 'package'.
  #57 2771.5 
  #57 174.8   Downloading mysql_connector_python-9.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 182.9   Downloading mysql_connector_python-9.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #57 191.1   Downloading mysql_connector_python-9.0.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.0 kB)
  #57 199.1   Downloading mysql_connector_python-8.4.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 207.1   Downloading mysql_connector_python-8.3.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #57 215.1   Downloading mysql_connector_python-8.2.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.1 kB)
  #57 215.2 INFO: pip is looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 888.5 INFO: pip is still looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #57 1305.2 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #57 1305.3 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 1305.4   Downloading opentelemetry_api-1.31.1-py3-none-any.whl.metadata (1.6 kB)
  #57 1305.4 Collecting opentelemetry-semantic-conventions==0.52b1 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1305.4   Downloading opentelemetry_semantic_conventions-0.52b1-py3-none-any.whl.metadata (2.5 kB)
  #57 1742.5 Collecting opentelemetry-sdk>=1.27.0 (from microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1742.6   Downloading opentelemetry_sdk-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #57 1742.7 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 1742.7   Downloading opentelemetry_api-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #57 1742.7 Collecting opentelemetry-semantic-conventions==0.52b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 1742.7   Downloading opentelemetry_semantic_conventions-0.52b0-py3-none-any.whl.metadata (2.5 kB)
  #57 2059.3 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 2059.4   Downloading opentelemetry_api-1.30.0-py3-none-any.whl.metadata (1.6 kB)
  #57 2059.4 Collecting opentelemetry-semantic-conventions==0.51b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2059.4   Downloading opentelemetry_semantic_conventions-0.51b0-py3-none-any.whl.metadata (2.5 kB)
  #57 2236.9 Collecting opentelemetry-api>=1.24.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #57 2236.9   Downloading opentelemetry_api-1.29.0-py3-none-any.whl.metadata (1.4 kB)
  #57 2236.9 Collecting opentelemetry-semantic-conventions==0.50b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.8.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2237.0   Downloading opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl.metadata (2.3 kB)
  #57 2326.3 Collecting microsoft-kiota-authentication-azure<2.0.0,>=1.8.0 (from msgraph-core>=1.3.3->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #57 2326.3   Downloading microsoft_kiota_authentication_azure-1.9.2-py3-none-any.whl.metadata (3.5 kB)
  #57 2444.4   Downloading microsoft_kiota_authentication_azure-1.9.1-py3-none-any.whl.metadata (3.5 kB)
  #57 2556.3   Downloading microsoft_kiota_authentication_azure-1.9.0-py3-none-any.whl.metadata (3.5 kB)
  #57 2668.9   Downloading microsoft_kiota_authentication_azure-1.8.0-py3-none-any.whl.metadata (3.5 kB)
  #57 2668.9 INFO: pip is looking at multiple versions of microsoft-kiota-authentication-azure to determine which version is compatible with other requirements. This could take a while.
  #57 2771.5 error: resolution-too-deep
  #57 2771.5 
  #57 2771.5 × Dependency resolution exceeded maximum depth
  #57 2771.5 ╰─> Pip cannot resolve the current dependencies as the dependency graph is too complex for pip to solve efficiently.
  #57 2771.5 
  #57 2771.5 hint: Try adding lower bounds to constrain your dependencies, for example: 'package>=2.0.0' instead of just 'package'.
  #57 2771.5 

I attempt (wild guessing) to limit it with:

https://github.com/apache/airflow/pull/49860

BTW. The way to reproduce it is fairly easy when you know how. Here is a detailed set of instructions:

  1. Check out airlfow repo
  2. Install breeze:
uv tool install -e ./dev/breeze # pipx should also work
  1. Build all packages to install in the image:
breeze release-management prepare-provider-distributions --distributions-list-file ./prod_image_installed_providers.txt --distribution-format wheel --include-not-ready-providers --skip-tag-check 

breeze release-management prepare-airflow-distributions --distribution-format wheel

breeze release-management prepare-task-sdk-distributions --distribution-format wheel

breeze release-management prepare-airflow-ctl-distributions --distribution-format wheel

That will prepare all packages in dist folder.

  1. Move the packages to docker-context-files
mv dist/*.whl docker-context-files/
  1. Run docker build and use those packages:
breeze prod-image build --install-distributions-from-context --airflow-constraints-mode constraints-source-providers --verbose

With --verbose it will show you the exact docker build command that it will use to install things. Eventually what it does is this long command to install packages that are present in docker-context-files - you can probably get very similar effect if you just run the same command outside of the docker build - in a clear venv - the key is to prepare those packages with the above steps:

Image

The interesting thing is that we know there is a possible resolution for those packages. They are all part of the same workspace in airflow repo:

uv sync --all-packages --python 3.12

Will sync even more than that - it will resolve ALL the provider packages + ALL even their development dependencies - and what we try to install in the PROD image is merely a subset of all the providers.

I hope it helps :)

potiuk avatar Apr 28 '25 07:04 potiuk

BTW. I think it might be involved with some protobuf incompatibilities. The https://github.com/apache/airflow/pull/49860 is not going to work - because of protobuf conflicts - I am looking at it with uv sync - which is quite a bit easier and faster to iterate on problems like that.

potiuk avatar Apr 28 '25 07:04 potiuk

  • Pip version: 25.1
  • Python version: 3.11.11
  • Operating System: Gentoo (x86_64)
  • Output of pip freeze:
$ pip freeze
$ echo $?
0

error: resolution-too-deep after approximately 80 minutes on a recent AMD Ryzen 7 7840HS.

The same requirements resolve with pip 25.0 (in around 13 minutes on the same hardware). I've cut out a bunch of internal specifics and constraints, but this is still a pretty "organic" case and not a minimum reproduction. Please let me know if other information would be helpful.

cburroughs avatar Apr 29 '25 01:04 cburroughs

Thanks @cburroughs, that's plenty of info, I'll start investigating, but I'm not likely to give you an exact workaround for a few days, and any pip optimization could take some time.

For the moment I can only recommend you either use uv pip, or use uv pip compile to generate better constraints or requirements.

notatallshaw avatar Apr 29 '25 01:04 notatallshaw

I'll start investigating, but I'm not likely to give you an exact workaround for a few days, and any pip optimization could take some time.

Thanks for investigating! Per the 'not for help' disclaimer at the top, my hope is that a real world example helps improve pip and I'm not expecting one uncanny trick that unblocks just me. I'm sure there are promising permutations of constraints around boto and other 'usual suspects' I can try before upgrading to a brand new pip becomes pressing.

cburroughs avatar Apr 29 '25 03:04 cburroughs

BTW. I think it might be involved with some protobuf incompatibilities. The apache/airflow#49860 is not going to work - because of protobuf conflicts - I am looking at it with uv sync - which is quite a bit easier and faster to iterate on problems like that.

After more fixes - still "resolution too deep" - but with slightly different trace - willl continue limiting stuff

Image

https://github.com/apache/airflow/actions/runs/14721786685/job/41318681642

Update: attempted to limit portalocker here: https://github.com/apache/airflow/pull/49936

potiuk avatar Apr 29 '25 08:04 potiuk

And yeah @notatallshaw -> we do understand it's not an easy issue to solve, and airflow and the way we have 700+ deps is a bit of an outlier, but we'll keep trying to make our deps a bit more pip friendly and maybe it will also help to find some future optimisations. Thanks for doing it !

Hopefully together we can improve resolver :)

potiuk avatar Apr 29 '25 08:04 potiuk

Yeah, sorry for this hit you multiple times, I assume all of these are caused by me limiting how much resolvelib will backjump. Unfortunately it's approach was unsound.

Once I've collected all of these in to my test scenario I'll play around with various changes to heuristics to see if they make an improvements.

A true fix might not come until pip adopts a CDCL or CDNL algorithm like pubgrub, like uv and poetry use. Which is my long term goal, but requires some information that pip and packaging aren't providing yet, I don't have any sort of timeline.

notatallshaw avatar Apr 29 '25 12:04 notatallshaw

Yeah, sorry for this hit you multiple times, I assume all of these are caused by me limiting how much resolvelib will backjump. Unfortunately it's approach was unsound.

Happy to help with more "playing" with it - it's not a huge problem for us - though we would love to get it sorted out soon-ish

potiuk avatar Apr 29 '25 14:04 potiuk

Hmm - even with latest attemp we still have "too deep".

https://github.com/apache/airflow/actions/runs/14732688845/job/41355638430

This time without a clear "contender:

  #61 160.1 Collecting mysql-connector-python>=8.2.0 (from apache-airflow-providers-mysql@ file:///docker-context-files/apache_airflow_providers_mysql-6.2.2-py3-none-any.whl)
  #61 160.1   Downloading mysql_connector_python-9.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #61 167.4   Downloading mysql_connector_python-9.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)
  #61 174.9   Downloading mysql_connector_python-9.0.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.0 kB)
  #61 182.2   Downloading mysql_connector_python-8.4.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #61 189.6   Downloading mysql_connector_python-8.3.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #61 196.9   Downloading mysql_connector_python-8.2.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (2.1 kB)
  #61 196.9 INFO: pip is looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #61 828.6 INFO: pip is still looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #61 1213.3 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #61 1213.4 Collecting opentelemetry-api>=1.26.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 1213.5   Downloading opentelemetry_api-1.31.1-py3-none-any.whl.metadata (1.6 kB)
  #61 1213.5 Collecting opentelemetry-semantic-conventions==0.52b1 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 1213.5   Downloading opentelemetry_semantic_conventions-0.52b1-py3-none-any.whl.metadata (2.5 kB)
  #61 1614.9 Collecting opentelemetry-sdk>=1.27.0 (from microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 1615.0   Downloading opentelemetry_sdk-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #61 1615.1 Collecting opentelemetry-api>=1.26.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 1615.1   Downloading opentelemetry_api-1.31.0-py3-none-any.whl.metadata (1.6 kB)
  #61 1615.1 Collecting opentelemetry-semantic-conventions==0.52b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 1615.1   Downloading opentelemetry_semantic_conventions-0.52b0-py3-none-any.whl.metadata (2.5 kB)
  #61 1904.7 Collecting opentelemetry-api>=1.26.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 1904.7   Downloading opentelemetry_api-1.30.0-py3-none-any.whl.metadata (1.6 kB)
  #61 1904.8 Collecting opentelemetry-semantic-conventions==0.51b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 1904.8   Downloading opentelemetry_semantic_conventions-0.51b0-py3-none-any.whl.metadata (2.5 kB)
  #61 2065.9 Collecting opentelemetry-api>=1.26.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 2065.9   Downloading opentelemetry_api-1.29.0-py3-none-any.whl.metadata (1.4 kB)
  #61 2065.9 Collecting opentelemetry-semantic-conventions==0.50b0 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 2065.9   Downloading opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl.metadata (2.3 kB)
  #61 2146.4 Collecting msal-extensions>=1.1.0 (from apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 2146.4   Downloading msal_extensions-1.3.0-py3-none-any.whl.metadata (7.8 kB)
  #61 2256.1   Downloading msal_extensions-1.2.0-py3-none-any.whl.metadata (7.6 kB)
  #61 2256.2 Collecting portalocker>=2.8.1 (from apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.3.1-py3-none-any.whl)
  #61 2256.2   Downloading portalocker-2.10.1-py3-none-any.whl.metadata (8.5 kB)
  #61 2263.4   Downloading portalocker-2.10.0-py3-none-any.whl.metadata (8.5 kB)
  #61 2270.7   Downloading portalocker-2.8.2-py3-none-any.whl.metadata (8.5 kB)
  #61 2278.0   Downloading portalocker-2.8.1-py3-none-any.whl.metadata (8.5 kB)
  #61 2841.3 error: resolution-too-deep
  #61 2841.3 
  #61 2841.3 × Dependency resolution exceeded maximum depth
  #61 2841.3 ╰─> Pip cannot resolve the current dependencies as the dependency graph is too complex for pip to solve efficiently.
  #61 2841.3 
  #61 2841.3 hint: Try adding lower bounds to constrain your dependencies, for example: 'package>=2.0.0' instead of just 'package'.
  #61 2841.3 
  #61 2841.3 Link: https://pip.pypa.io/en/stable/topics/dependency-resolution/#handling-resolution-too-deep-errors

potiuk avatar Apr 29 '25 15:04 potiuk

@cburroughs here is a new requirements and constraints file for you that works with the latest version of pip:

requirements.txt

acryl-datahub[datahub-rest]==0.14.1.2
aiobotocore[boto3]
aiohttp~=3.10.11
alembic>=1.8.1
ansicolors~=1.1.8
arrow_odbc
awswrangler~=3.7.3
backoff >= 2.2.1
beautifulsoup4>=4.12.2,<4.13.0
boto3
boto3-stubs[essential]
botocore
bottleneck
buildkite-sdk==0.2.0
cachetools
catboost>=1.2.2
cf_xarray
click
cloudpathlib[s3]>=0.13.0
coolname==2.2.0
coverage[toml]==7.6.10
cowsay
croniter>=1.3.8,<2
cronsim
cycler
dagster
dagster-aws
dagster-dbt
dagster-docker
dagster-pipes
dagster-postgres
dagster-webserver
darts>=0.30,<1.0
dash-extensions~=0.1.11
dash[diskcache]>=2.18.2,<3.0
dash_bootstrap_components
databricks-connect==15.4
databricks-sdk[notebook]>=0.29.0
databricks-sql-connector~=3.7.2
dataclasses_json
DataProfiler
dbt-core~=1.9.0
dbt-snowflake~=1.9.0
deepdiff>=6.2.1
dill
diskcache
duckdb==1.1.1
fastapi[standard,pydantic-settings]
filelock
flask~=2.2.2
flask_awscognito>=1.3
flask_cors>=3.0.10
flask_jwt_extended>=4.4.4
fpdf2
freezegun
fsspec[s3,tqdm]
geopy
GitPython
gql[requests]>3
grafanalib>=0.7.0
grpcio
grpcio-health-checking
grpcio-reflection
gunicorn~=23.0.0
highspy
hikaru-core==1.1.2
hikaru-model-23
hikaru-model-24
hikaru-model-25
hikaru-model-26
hikaru-model-27
hikaru-model-28
holidays
hyperopt==0.2.5
hypothesis==6.127.9
ipdb
ipykernel
ipython>8,<9
itables
joblib<2
jsonpickle>=3.0.1
juliacall==0.9.20
jupyter
jupyter-console
jupyter_client
jupyterlab
kaleido
keras
kubernetes==31.0.0
langchain==0.3.20
langchain-community==0.3.19
langchain-core==0.3.43
langchain-huggingface==0.1.2
langchain-mcp-adapters
langchain-openai==0.3.8
langchain-pinecone==0.2.3
langchain-text-splitters==0.3.6
langgraph==0.3.5
langgraph-checkpoint-amazon-dynamodb==0.1.1
langgraph-checkpoint-sqlite
langsmith
lightgbm<5,>=4.6.0
loguru
lxml
lxml-stubs
matplotlib<3.9.0
mcp
MechanicalSoup==1.3.0
metaflow-card-html
metaflow[stubs]==2.12.17
meteostat
mkdocs-awesome-pages-plugin~=2.9.2
mkdocs-gen-files~=0.5.0
mkdocs-git-revision-date-localized-plugin~=1.2.0
mkdocs-include-markdown-plugin~=6.1.1
mkdocs-macros-plugin~=1.0.4
mkdocs-material~=9.5.17
mkdocs-pdf~=0.1.2
mkdocs-redirects~=1.2.1
mkdocs-site-urls~=0.2.0
mkdocstrings[python]~=0.25.1
mlflow>=2.0,<2.18.0
moto[sts,server,dynamodb]>=5,<6
multiprocess
mypy-protobuf==3.1
mypy[dmypy,faster-cache]==1.15.0
nbconvert
nbformat
netcdf4<1.7
networkx>=2.8.8
notebook
numpy>=1.26.0,<2
oauthlib[signedtoken]>=3.2.2
openai==1.65.5
openpyxl>=3.1.2
opentelemetry-container-distro
opentelemetry-instrumentation-asyncio
opentelemetry-instrumentation-botocore
opentelemetry-instrumentation-fastapi
opentelemetry-instrumentation-flask
opentelemetry-instrumentation-grpc
opentelemetry-instrumentation-langchain
opentelemetry-instrumentation-openai
opentelemetry-instrumentation-pinecone
opentelemetry-instrumentation-requests
opentelemetry-instrumentation-threading==0.50b0
opentelemetry-sdk-extension-aws
opentelemetry-semantic-conventions
opentelemetry.api>=1.28.0
opentelemetry.exporter.otlp.proto.grpc>=1.28.0
opentelemetry.exporter.otlp.proto.http>=1.28.0
opentelemetry.sdk>=1.28.0
optuna
packaging
pandas[compression,consortium-standard,parquet,performance]~=2.2.3
pandera[polars]>=0.22
papermill
paramiko
pendulum
pg8000
pillow
pinecone==5.4.2
pint<=0.20.1
pip-audit
pip-licenses
pip-tools
platformdirs
plotly>=5.16.0,<6
polars==1.24.0
pre-commit==3.7.0
prometheus-client>=0.17.1
prometheus-fastapi-instrumentator
prometheus-flask-exporter~=0.21.0
prometheus-query-builder>=0.1.4
protobuf
protovalidate==0.4.0
psutil>=5.8.0,<6
psycopg2-binary
psycopg[binary]
pvlib~=0.11.0
py-grpc-prometheus
pyarrow
pyarrow-stubs
pycobertura~=3.3.1
pydantic>2.5.0
pydantic-yaml
pydantic_settings
pydot
pygrib==2.1.5
pyjanitor==0.28.1
pyjwt[crypto]>=2.7.0
pyodbc
pyOpenSSL
pytest>=7.2.0,<8
pytest-asyncio
pytest-cov
pytest-docker
pytest-mock
pytest-opentelemetry
pytest-postgresql>=4.1.1,<6
pytest-xdist
python-dateutil>=2.8.2
python-dotenv
python-gitlab>=4.0.0
python-ulid>=2.4.0
pytz
pyvis
pyyaml>=6.0.1
ray[tune]
requests
requests-oauthlib>=2.0.0
rich
ruamel.yaml
s3fs[boto3]
scikit-learn>=1.2.2,<1.6
scipy
seaborn>=0.12.2
selenium==4.16.0
setuptools
shap>=0.42
sktime>=0.33.0
slack_sdk
snowflake-connector-python[pandas]~=3.13.1
snowflake-snowpark-python[pandas]~=1.21.1
snowflake-sqlalchemy~=1.7.1
solarforecastarbiter
sortedcontainers
sqlalchemy[postgresql-psycopgbinary,mypy]>2
sqlfluff==3.2.5
sqlparse
statsmodels>=0.14.0
tables>=3.9.2
tabulate
temporalio==1.8.0
tensorflow-probability[tf]<0.25
tomli
torch
tqdm>=4.66.1
typer>=0.12.4
types-beautifulsoup4>=4.12.0.7,<4.13.0
types-botocore
types-cachetools
types-confluent-kafka
types-croniter<2
types-flask-cors
types-fpdf2
types-paramiko
types-Pillow
types-protobuf
types-psycopg2
types-pyOpenSSL
types-python-dateutil
types-pytz
types-PyYAML
types-requests
types-requests-oauthlib
types-tensorflow==2.15.0.20240303
types-tqdm
types-tzlocal
types-xmltodict
typing_extensions>=4.4.0
tzdata
unique-names-generator==1.0.2
urllib3
uvicorn
uvicorn-worker
werkzeug~=3.0.6
xarray<=2025.1.2
xgboost<2.1.0
xlrd==2.0.1
XlsxWriter
xmlschema<4
xmlsec==1.3.14
xmltodict
yamllint==1.35.1
yamlpath==3.8.2
zeep==4.2.1

constraints.txt

Logbook==1.5.3
bottleneck==1.3.7
cftime==1.6.3
fastavro==1.9.0
future==1.0.0
greenlet==3.0.3
grpcio==1.70.0
h5py==3.11.0
lazy-object-proxy==1.10.0
lightgbm==4.6.0
marisa-trie==1.1.0
mkdocs-redirects==1.2.1
minimal-snowplow-tracker==0.0.2
osqp==0.6.3
pendulum==2.1.2
psutil==5.9.8
pytest-parametrization==2022.2.1
qdldl==0.1.7.post0
ratelimit==2.2.1
scs==3.2.4.post1
sqlalchemy==2.0.36
tables==3.9.2
thrift==0.16.0

confluent-kafka>=2.1.0
dm-tree<0.1.9
kaleido==0.2.1
lz4<=4.3.3
mkdocs-autorefs<1.4
protobuf~=5.29.3
types-protobuf>5.29,<5.30
oscrypto==1.3.0.post1
cryptography>=43
urllib3>=2.2.0
cvxpy>=1.6

boto3 ~= 1.35.0
botocore ~= 1.35.0
boto3-stubs ~= 1.35.0
moto >= 4.2.14
cachetools >= 5.3.0
click >= 8.1.0
coverage >= 7.3.0
dash >= 2.10.0
dash_bootstrap_components >= 1.4.0
freezegun >= 1.3.0
graphene >= 3.0
holidays >= 0.30
ipython >= 8.0.0
kubernetes >= 28.0.0
loguru >= 0.6.0
matplotlib >= 3.7.0
metaflow >= 2.11.15
pytest-mock >= 3.9.0
pytest-xdist >= 3.0.0
pytz >= 2023.3
requests >= 2.20.0
rich >= 13.7.1
ruamel.yaml >= 0.17.0
s3fs >= 2023.1.0
setuptools >= 69.0.0
shap >= 0.40.0
spacy >= 3.4.1, < 3.7.6
torch >= 2.0
xarray >= 2023.10.1
XlsxWriter >= 3.2.0

Thanks for contributing, it has helped me identify a heuristic that significantly speeds up resolution for when users have a very large number of user requirements, as opposed to transitive dependencies. By itself it isn't enough to resolve your ResolutionTooDeep but it does significantly speed up getting there, and I'm sure for other requirements it will speed up a solution or avoid a ResolutionTooDeep. To set expectations this will be for the next version of pip (25.2, in about 3 months).

Your scenario has two resolution "knots" in it, both caused by highly coupled requirements, i.e. multiple requirements depend on each other exactly. At a high level, this is the problem: let's say you have A-foo, B-foo, C-foo and they all depend on foo-core, and each version of A-foo, B-foo, C-foo are tightly bound to a version of foo-core, then if you pin A-foo, then that means only a small number of versions of foo-core are allowed, and that in turn causes only specific versions of B-foo and C-foo to be allowed. But pip's resolver isn't smart enough to understand that, and often has to check many combinations of the versions of B-foo and C-foo. This scales badly, as there are more versions and more requirements there is an exponential explosion in combinations that pip backtracks on.

The two knots in this case are the "boto" knot and the "opentelemetry" knot. the boto knot is mainly caused by boto3 ~= 1.35.0, botocore ~= 1.35.0, boto3-stubs ~= 1.35.0, and the opentelemetry knot is mainly caused by opentelemetry-instrumentation-threading==0.50b0. You can either "loosen" the knots by setting reasonable lower bounds, which is what I did above, or you can "tighten" the knots by pinning all the related packages directly (to do this I would suggest giving your requirements and constraints to uv pip compile and then picking out the pins that you want).

@potiuk apologies, I have not yet worked on reproducing your examples, but your comment has given me an idea on how to revive https://github.com/sarugaku/resolvelib/pull/183 without causing any scenarios to fail when they currently succeed, which should restore the power of the old behavior with none of the show stoppers, I will be working on that shortly.

notatallshaw avatar May 01 '25 01:05 notatallshaw

@potiuk apologies, I have not yet worked on reproducing your examples, but your https://github.com/pypa/pip/issues/13185#issuecomment-2842875497 has given me an idea on how to revive https://github.com/sarugaku/resolvelib/pull/183 without causing any scenarios to fail when they currently succeed, which should restore the power of the old behavior with none of the show stoppers, I will be working on that shortly.

No worries. This is not a very "urgent" thing for us - we are gearing for 3.0.1 bugfix release some time next week but even if we do not have a workaround for that - we can live with that and previous pip / resolvelib algorithm for a while. And your comments above are super helpful - I might take a close look again at what we have and try to follow your line of thought - in our case we have similar knots I think - boto and opentelemetry are both our dependencies and they are both problematic from inter-dependency point of view. In the past what I did to solve similar issues, was - rather than solve them in airflow package dependencies, to add (hard-code) extra limits when we are resolving the deps, and I might do the same eventually - even without downgrading pip (which I would like to avoid).

I really appreciate all the effort you make to attempt to improve it :heart: .. If you find anything - let me know, but I will also do a few more attempts on my own soon.

potiuk avatar May 01 '25 09:05 potiuk

FWIW your last breeze command fails for me with:

2.989 ERROR: Could not find a version that satisfies the requirement apache-airflow==3.1.0 (from versions: 1.8.1, 1.8.2rc1, 1.8.2, 1.9.0, 1.10.0, 1.10.1b1, 1.10.1rc2, 1.10.1, 1.10.2b2, 1.10.2rc1, 1.10.2rc2, 1.10.2rc3, 1.10.2, 1.10.3b1, 1.10.3b2, 1.10.3rc1, 1.10.3rc2, 1.10.3, 1.10.4b2, 1.10.4rc1, 1.10.4rc2, 1.10.4rc3, 1.10.4rc4, 1.10.4rc5, 1.10.4, 1.10.5rc1, 1.10.5, 1.10.6rc1, 1.10.6rc2, 1.10.6, 1.10.7rc1, 1.10.7rc2, 1.10.7rc3, 1.10.7, 1.10.8rc1, 1.10.8, 1.10.9rc1, 1.10.9, 1.10.10rc1, 1.10.10rc2, 1.10.10rc3, 1.10.10rc4, 1.10.10rc5, 1.10.10, 1.10.11rc1, 1.10.11rc2, 1.10.12rc1, 1.10.12rc2, 1.10.12rc3, 1.10.12rc4, 1.10.12, 1.10.13rc1, 1.10.14rc1, 1.10.14rc2, 1.10.14rc3, 1.10.14rc4, 1.10.14, 1.10.15rc1, 1.10.15, 2.0.0b1, 2.0.0b2, 2.0.0b3, 2.0.0rc1, 2.0.0rc2, 2.0.0rc3, 2.0.0, 2.0.1rc1, 2.0.1rc2, 2.0.1, 2.0.2rc1, 2.0.2, 2.1.0rc1, 2.1.0rc2, 2.1.0, 2.1.1rc1, 2.1.1, 2.1.2rc1, 2.1.2, 2.1.3rc1, 2.1.3, 2.1.4rc1, 2.1.4rc2, 2.1.4, 2.2.0b1, 2.2.0b2, 2.2.0rc1, 2.2.0, 2.2.1rc1, 2.2.1rc2, 2.2.1, 2.2.2rc1, 2.2.2rc2, 2.2.2, 2.2.3rc1, 2.2.3rc2, 2.2.3, 2.2.4rc1, 2.2.4, 2.2.5rc1, 2.2.5rc2, 2.2.5rc3, 2.2.5, 2.3.0b1, 2.3.0rc1, 2.3.0rc2, 2.3.0, 2.3.1rc1, 2.3.1, 2.3.2rc1, 2.3.2rc2, 2.3.2, 2.3.3rc1, 2.3.3rc2, 2.3.3rc3, 2.3.3, 2.3.4rc1, 2.3.4, 2.4.0b1, 2.4.0rc1, 2.4.0, 2.4.1rc1, 2.4.1, 2.4.2rc1, 2.4.2, 2.4.3rc1, 2.4.3, 2.5.0rc1, 2.5.0rc2, 2.5.0rc3, 2.5.0, 2.5.1rc1, 2.5.1rc2, 2.5.1, 2.5.2rc1, 2.5.2rc2, 2.5.2, 2.5.3rc1, 2.5.3rc2, 2.5.3, 2.6.0b1, 2.6.0rc1, 2.6.0rc2, 2.6.0rc3, 2.6.0rc4, 2.6.0rc5, 2.6.0, 2.6.1rc1, 2.6.1rc2, 2.6.1rc3, 2.6.1, 2.6.2rc1, 2.6.2rc2, 2.6.2, 2.6.3rc1, 2.6.3, 2.7.0b1, 2.7.0rc1, 2.7.0rc2, 2.7.0, 2.7.1rc1, 2.7.1rc2, 2.7.1, 2.7.2rc1, 2.7.2, 2.7.3rc1, 2.7.3, 2.8.0b1, 2.8.0rc1, 2.8.0rc2, 2.8.0rc3, 2.8.0rc4, 2.8.0, 2.8.1rc1, 2.8.1, 2.8.2rc1, 2.8.2rc2, 2.8.2rc3, 2.8.2, 2.8.3rc1, 2.8.3, 2.8.4rc1, 2.8.4, 2.9.0b1, 2.9.0b2, 2.9.0rc1, 2.9.0rc2, 2.9.0rc3, 2.9.0, 2.9.1rc1, 2.9.1rc2, 2.9.1, 2.9.2rc1, 2.9.2, 2.9.3rc1, 2.9.3, 2.10.0b1, 2.10.0b2, 2.10.0rc1, 2.10.0, 2.10.1rc1, 2.10.1, 2.10.2rc1, 2.10.2, 2.10.3rc1, 2.10.3rc2, 2.10.3, 2.10.4rc1, 2.10.4, 2.10.5rc1, 2.10.5, 3.0.0b4, 3.0.0rc1, 3.0.0rc1.post1, 3.0.0rc1.post2, 3.0.0rc1.post3, 3.0.0rc1.post4, 3.0.0rc2, 3.0.0rc3, 3.0.0rc4, 3.0.0)
2.989 ERROR: No matching distribution found for apache-airflow==3.1.0

I don't really want to focus on breeze though because I want to be able to reproduce without it, and looking at the output of that and uv sync though I was able to reproduce with:

pip install --dry-run .[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv] ./airflow-core ./providers/amazon ./providers/celery ./providers/cncf/kubernetes ./providers/common/compat ./providers/common/io ./providers/common/messaging ./providers/common/sql ./providers/docker ./providers/elasticsearch ./providers/fab ./providers/ftp ./providers/git ./providers/google ./providers/grpc ./providers/hashicorp ./providers/http ./providers/microsoft/azure ./providers/mysql ./providers/odbc ./providers/openlineage ./providers/postgres ./providers/redis ./providers/sendgrid ./providers/sftp ./providers/slack ./providers/smtp ./providers/snowflake ./providers/ssh ./providers/standard ./task-sdk

I'll start looking at what are the problematic requirements and dependencies, to see if I can help out, or confirm improvements in heuristics or changes to the resolver.

notatallshaw avatar May 01 '25 13:05 notatallshaw

The fix in https://github.com/apache/airflow/pull/50098 worked !! Thanks @notatallshaw !!!!

potiuk avatar May 02 '25 06:05 potiuk

2.989 ERROR: Could not find a version that satisfies the requirement apache-airflow==3.1.0

FYI. This is because our build is preparing airflow distribution from main (3.1.0 is not yet released - but our CI is building all the distributions that we can release from main and attemps to install them from local .whl files (this is where the build failed to resolve the deps).

From my instructions above, This one prepares distributions for airflow (apache-airflow and apache-airflow-core - currently in main it's 3.1.0 for both):

breeze release-management prepare-airflow-distributions --distribution-format wheel

And this step moves them to docker-context-files where our Docker build is picking them from during the docker build (together with all other distributions prepared - task-sdk, airflow-ctl and a subset of providers (30 or so out of 90+) that get installed by default in the PROD image;

mv dist/*.whl docker-context-files/

potiuk avatar May 02 '25 06:05 potiuk

Hi, I'm getting a ResolutionTooDeepError when using pip-compile from pip-tools. A reproduction example can be found in this issue: https://github.com/jazzband/pip-tools/issues/2177

silv-io avatar May 05 '25 09:05 silv-io

@silv-io thanks for the report, I'll add it to my resolver test suite to improve future versions of pip. I'll also take a look in the next few days if I can help you minimally modify your requirements to avoid this error.

notatallshaw avatar May 05 '25 11:05 notatallshaw

Hi there, also ran into this working with soda-core.

Reproduction:

pip install --dry-run 'google-cloud-bigquery>=3' soda-core

Results in error: resolution-too-deep.

Based on @notatallshaw's feedback above this is probably related to the opentelemetry "knot". I've tried loosening the knot, but not been successful so far. The only thing that worked is tightening the knot by pinning opentelemetry-exporter-otlp-proto-http. Unfortunately that isn't a great solution as we don't want to force users of soda-core to use a specific version of opentelemetry.

mivds avatar May 06 '25 20:05 mivds

@mivds thanks for the report, I will take a look over the next few days to see if there's anything I can immediately suggest to help, and I'll add it to the set of known scenarios where this happens to test future optimizations.

notatallshaw avatar May 07 '25 03:05 notatallshaw

Hi, I'm also running into this with

pip install --dry-run 'google-cloud-bigquery>=3.27' 'weaviate-client>=4.9.3'

Interestingly, I've found that adding grpcio-tools>=1.31 helps (although it still seems to backtrack more than necessary), but grpcio-tools>=1.30 or lower doesn't.

Pip version: 25.1.1 Python version: 3.11.3 OS: macOS 14.6.1, Ubuntu 24.04 Output of pip freeze: nothing

okhaliavka avatar May 08 '25 10:05 okhaliavka

Sorry if this example does not fit as this has rather big requirements.txt.

Pip version: 25.1.1 Python version: 3.11.9 OS: Windows 11 24H2 build 4061 AMD64 Output of pip freeze: Empty

Reproduction steps: Create a requirements.txt file.

alembic~=1.15
fastapi[standard]<1.0
httpx
numpy~=2.0
onnxruntime~=1.22
opencv-python~=4.11
opencv-python-headless~=4.11
paddleocr>=3.0.0
paddlepaddle
Pillow~=11.0
pycryptodomex~=3.23
pydantic~=2.0
scikit-image<1.0
scipy~=1.15
sqlalchemy~=2.0
tqdm

Then run pip install -r requirements.txt --dry-run in a new virtual environment (ensure pip is updated to latest first).

Expected outcome: ResolutionImpossible error. paddleocr >= 3.0 depends on paddlex == 3.0.0 which pins numpy == 1.24.4 but requirements.txt requires numpy ~= 2.0. Actual outcome: error: resolution-too-deep Additional information: It unnecessarily looks for anyio version then starlette which pip then stops with resolution too deep. Running pip install paddleocr>=3.0 numpy~=2.0 (escape accordingly) result in expected outcome of ResolutionImpossible error.

MikuAuahDark avatar Jun 03 '25 03:06 MikuAuahDark

@MikuAuahDark thanks for the example, it will be very helpful!

notatallshaw avatar Jun 03 '25 03:06 notatallshaw

I ran into this issue and I have experimented with the phenomenon.

Pip version: 25.1.1 Python version: 3.11.2 OS: GNU/Linux Debian 12.10 (x86_64) Output of pip freeze: Empty Output of pip list:

Package    Version
---------- -------
pip        25.1.1
setuptools 80.9.0

Command that runs into ResolutionTooDeep:

pip install "datacontract-cli==0.10.10"

I noticed it's trying to find a working version for the direct dependency soda-core-duckdb<3.4.0,>=3.3.1, downloading all allowed version in the process and getting lost in the dependencies of that dependency.

If I copy this dependencies of datacontract-cli==0.10.10 into the command, it installs successfully and quickly.

pip install "datacontract-cli==0.10.10" "soda-core-duckdb<3.4.0,>=3.3.1"

I did not expect that. Packages from the command line seem to be handled differently to dependencies, even if the version constraints are exactly the same. I noticed this after having put all of the dependencies of datacontract-cli into a requirements.txt and experiencing no trouble with installing it. Maybe this helps.

All of this is a non-issue with pip 25.0.1.

SammyJunghanns avatar Jun 08 '25 17:06 SammyJunghanns

@SammyJunghanns thanks for the examples and experimentation. I'll be adding them to known examples of bad resolution, and I'm working on adding back the optimization from 25.0.1 without the issue it had of occasional saying things were impossible when they weren't.

You are correct that directly specified requirements are handled differently to dependencies of those requirements. The idea is that directly specified requirements must be resolved and therefore are all collected before the main resolution even begins.

We could add an optimization when the direct requirements are pinning to an exact version take their children as also must be collected before anything else. I plan to add this in the future when I have a couple of examples, like this one, that show it makes real world improvements.

notatallshaw avatar Jun 08 '25 18:06 notatallshaw

Another example in Airflow recently:

  #61 2.783 Found provider distributions in docker-context-files folder: apache-airflow-providers-amazon @ file:///docker-context-files/apache_airflow_providers_amazon-9.8.0-py3-none-any.whl apache-airflow-providers-celery @ file:///docker-context-files/apache_airflow_providers_celery-3.11.0-py3-none-any.whl apache-airflow-providers-cncf-kubernetes @ file:///docker-context-files/apache_airflow_providers_cncf_kubernetes-10.5.0-py3-none-any.whl apache-airflow-providers-common-compat @ file:///docker-context-files/apache_airflow_providers_common_compat-1.7.0-py3-none-any.whl apache-airflow-providers-common-io @ file:///docker-context-files/apache_airflow_providers_common_io-1.6.0-py3-none-any.whl apache-airflow-providers-common-messaging @ file:///docker-context-files/apache_airflow_providers_common_messaging-1.0.2-py3-none-any.whl apache-airflow-providers-common-sql @ file:///docker-context-files/apache_airflow_providers_common_sql-1.27.1-py3-none-any.whl apache-airflow-providers-docker @ file:///docker-context-files/apache_airflow_providers_docker-4.4.0-py3-none-any.whl apache-airflow-providers-elasticsearch @ file:///docker-context-files/apache_airflow_providers_elasticsearch-6.3.0-py3-none-any.whl apache-airflow-providers-fab @ file:///docker-context-files/apache_airflow_providers_fab-2.2.0-py3-none-any.whl apache-airflow-providers-ftp @ file:///docker-context-files/apache_airflow_providers_ftp-3.13.0-py3-none-any.whl apache-airflow-providers-git @ file:///docker-context-files/apache_airflow_providers_git-0.0.2-py3-none-any.whl apache-airflow-providers-google @ file:///docker-context-files/apache_airflow_providers_google-15.1.0-py3-none-any.whl apache-airflow-providers-grpc @ file:///docker-context-files/apache_airflow_providers_grpc-3.8.0-py3-none-any.whl apache-airflow-providers-hashicorp @ file:///docker-context-files/apache_airflow_providers_hashicorp-4.2.0-py3-none-any.whl apache-airflow-providers-http @ file:///docker-context-files/apache_airflow_providers_http-5.3.0-py3-none-any.whl apache-airflow-providers-microsoft-azure @ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.4.0-py3-none-any.whl apache-airflow-providers-mysql @ file:///docker-context-files/apache_airflow_providers_mysql-6.3.0-py3-none-any.whl apache-airflow-providers-odbc @ file:///docker-context-files/apache_airflow_providers_odbc-4.10.0-py3-none-any.whl apache-airflow-providers-openlineage @ file:///docker-context-files/apache_airflow_providers_openlineage-2.3.0-py3-none-any.whl apache-airflow-providers-postgres @ file:///docker-context-files/apache_airflow_providers_postgres-6.2.0-py3-none-any.whl apache-airflow-providers-redis @ file:///docker-context-files/apache_airflow_providers_redis-4.1.0-py3-none-any.whl apache-airflow-providers-sendgrid @ file:///docker-context-files/apache_airflow_providers_sendgrid-4.1.0-py3-none-any.whl apache-airflow-providers-sftp @ file:///docker-context-files/apache_airflow_providers_sftp-5.3.0-py3-none-any.whl apache-airflow-providers-slack @ file:///docker-context-files/apache_airflow_providers_slack-9.1.0-py3-none-any.whl apache-airflow-providers-smtp @ file:///docker-context-files/apache_airflow_providers_smtp-2.1.0-py3-none-any.whl apache-airflow-providers-snowflake @ file:///docker-context-files/apache_airflow_providers_snowflake-6.3.1-py3-none-any.whl apache-airflow-providers-ssh @ file:///docker-context-files/apache_airflow_providers_ssh-4.1.0-py3-none-any.whl apache-airflow-providers-standard @ file:///docker-context-files/apache_airflow_providers_standard-1.2.0-py3-none-any.whl apache-airflow-task-sdk @ file:///docker-context-files/apache_airflow_task_sdk-1.1.0-py3-none-any.whl
  #61 2.783 
  #61 2.783 
  #61 2.783 Installing docker-context-files distributions without constraints
  #61 2.783 
  #61 2.783 + pip install --root-user-action ignore 'apache-airflow[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv] @ file:///docker-context-files/apache_airflow-3.1.0-py3-none-any.whl' 'apache-airflow-core @ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl' 'apache-airflow-providers-amazon @ file:///docker-context-files/apache_airflow_providers_amazon-9.8.0-py3-none-any.whl' 'apache-airflow-providers-celery @ file:///docker-context-files/apache_airflow_providers_celery-3.11.0-py3-none-any.whl' 'apache-airflow-providers-cncf-kubernetes @ file:///docker-context-files/apache_airflow_providers_cncf_kubernetes-10.5.0-py3-none-any.whl' 'apache-airflow-providers-common-compat @ file:///docker-context-files/apache_airflow_providers_common_compat-1.7.0-py3-none-any.whl' 'apache-airflow-providers-common-io @ file:///docker-context-files/apache_airflow_providers_common_io-1.6.0-py3-none-any.whl' 'apache-airflow-providers-common-messaging @ file:///docker-context-files/apache_airflow_providers_common_messaging-1.0.2-py3-none-any.whl' 'apache-airflow-providers-common-sql @ file:///docker-context-files/apache_airflow_providers_common_sql-1.27.1-py3-none-any.whl' 'apache-airflow-providers-docker @ file:///docker-context-files/apache_airflow_providers_docker-4.4.0-py3-none-any.whl' 'apache-airflow-providers-elasticsearch @ file:///docker-context-files/apache_airflow_providers_elasticsearch-6.3.0-py3-none-any.whl' 'apache-airflow-providers-fab @ file:///docker-context-files/apache_airflow_providers_fab-2.2.0-py3-none-any.whl' 'apache-airflow-providers-ftp @ file:///docker-context-files/apache_airflow_providers_ftp-3.13.0-py3-none-any.whl' 'apache-airflow-providers-git @ file:///docker-context-files/apache_airflow_providers_git-0.0.2-py3-none-any.whl' 'apache-airflow-providers-google @ file:///docker-context-files/apache_airflow_providers_google-15.1.0-py3-none-any.whl' 'apache-airflow-providers-grpc @ file:///docker-context-files/apache_airflow_providers_grpc-3.8.0-py3-none-any.whl' 'apache-airflow-providers-hashicorp @ file:///docker-context-files/apache_airflow_providers_hashicorp-4.2.0-py3-none-any.whl' 'apache-airflow-providers-http @ file:///docker-context-files/apache_airflow_providers_http-5.3.0-py3-none-any.whl' 'apache-airflow-providers-microsoft-azure @ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.4.0-py3-none-any.whl' 'apache-airflow-providers-mysql @ file:///docker-context-files/apache_airflow_providers_mysql-6.3.0-py3-none-any.whl' 'apache-airflow-providers-odbc @ file:///docker-context-files/apache_airflow_providers_odbc-4.10.0-py3-none-any.whl' 'apache-airflow-providers-openlineage @ file:///docker-context-files/apache_airflow_providers_openlineage-2.3.0-py3-none-any.whl' 'apache-airflow-providers-postgres @ file:///docker-context-files/apache_airflow_providers_postgres-6.2.0-py3-none-any.whl' 'apache-airflow-providers-redis @ file:///docker-context-files/apache_airflow_providers_redis-4.1.0-py3-none-any.whl' 'apache-airflow-providers-sendgrid @ file:///docker-context-files/apache_airflow_providers_sendgrid-4.1.0-py3-none-any.whl' 'apache-airflow-providers-sftp @ file:///docker-context-files/apache_airflow_providers_sftp-5.3.0-py3-none-any.whl' 'apache-airflow-providers-slack @ file:///docker-context-files/apache_airflow_providers_slack-9.1.0-py3-none-any.whl' 'apache-airflow-providers-smtp @ file:///docker-context-files/apache_airflow_providers_smtp-2.1.0-py3-none-any.whl' 'apache-airflow-providers-snowflake @ file:///docker-context-files/apache_airflow_providers_snowflake-6.3.1-py3-none-any.whl' 'apache-airflow-providers-ssh @ file:///docker-context-files/apache_airflow_providers_ssh-4.1.0-py3-none-any.whl' 'apache-airflow-providers-standard @ file:///docker-context-files/apache_airflow_providers_standard-1.2.0-py3-none-any.whl' 'apache-airflow-task-sdk @ file:///docker-context-files/apache_airflow_task_sdk-1.1.0-py3-none-any.whl'
  #61 3.575 Processing /docker-context-files/apache_airflow-3.1.0-py3-none-any.whl (from apache-airflow[aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,microsoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snowflake,ssh,statsd,uv]@ file:///docker-context-files/apache_airflow-3.1.0-py3-none-any.whl)
  #61 3.900 Processing /docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl
  #61 3.928 Processing /docker-context-files/apache_airflow_providers_amazon-9.8.0-py3-none-any.whl
  #61 3.939 Processing /docker-context-files/apache_airflow_providers_celery-3.11.0-py3-none-any.whl
  #61 3.942 Processing /docker-context-files/apache_airflow_providers_cncf_kubernetes-10.5.0-py3-none-any.whl
  #61 3.944 Processing /docker-context-files/apache_airflow_providers_common_compat-1.7.0-py3-none-any.whl
  #61 3.946 Processing /docker-context-files/apache_airflow_providers_common_io-1.6.0-py3-none-any.whl
  #61 3.949 Processing /docker-context-files/apache_airflow_providers_common_messaging-1.0.2-py3-none-any.whl
  #61 3.951 Processing /docker-context-files/apache_airflow_providers_common_sql-1.27.1-py3-none-any.whl
  #61 3.954 Processing /docker-context-files/apache_airflow_providers_docker-4.4.0-py3-none-any.whl
  #61 3.956 Processing /docker-context-files/apache_airflow_providers_elasticsearch-6.3.0-py3-none-any.whl
  #61 3.958 Processing /docker-context-files/apache_airflow_providers_fab-2.2.0-py3-none-any.whl
  #61 3.963 Processing /docker-context-files/apache_airflow_providers_ftp-3.13.0-py3-none-any.whl
  #61 212.3   Downloading mysql_connector_python-8.4.0-cp39-cp39-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #61 248.4   Downloading mysql_connector_python-8.3.0-cp39-cp39-manylinux_2_17_x86_64.whl.metadata (1.9 kB)
  #61 284.7   Downloading mysql_connector_python-8.2.0-cp39-cp39-manylinux_2_17_x86_64.whl.metadata (2.1 kB)
  #61 284.8 INFO: pip is looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #61 284.8   Downloading mysql_connector_python-8.1.0-cp39-cp39-manylinux_2_17_x86_64.whl.metadata (2.0 kB)
  #61 284.9   Downloading mysql_connector_python-8.0.33-cp39-cp39-manylinux1_x86_64.whl.metadata (1.8 kB)
  #61 285.0   Downloading mysql_connector_python-8.0.32-cp39-cp39-manylinux1_x86_64.whl.metadata (1.8 kB)
  #61 285.0   Downloading mysql_connector_python-8.0.31-cp39-cp39-manylinux1_x86_64.whl.metadata (1.8 kB)
  #61 285.1   Downloading mysql_connector_python-8.0.30-cp39-cp39-manylinux1_x86_64.whl.metadata (1.8 kB)
  #61 285.1   Downloading mysql_connector_python-8.0.29-cp39-cp39-manylinux1_x86_64.whl.metadata (1.7 kB)
  #61 322.3 INFO: pip is still looking at multiple versions of mysql-connector-python to determine which version is compatible with other requirements. This could take a while.
  #61 503.0 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  #61 541.1 Collecting opentelemetry-api>=1.26.0 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 541.1   Downloading opentelemetry_api-1.33.1-py3-none-any.whl.metadata (1.6 kB)
  #61 541.1 Collecting opentelemetry-semantic-conventions==0.54b1 (from opentelemetry-sdk>=1.27.0->microsoft-kiota-abstractions<2.0.0,>=1.9.0->apache-airflow-providers-microsoft-azure@ file:///docker-context-files/apache_airflow_providers_microsoft_azure-12.4.0-py3-none-any.whl)
  #61 541.1   Downloading opentelemetry_semantic_conventions-0.54b1-py3-none-any.whl.metadata (2.5 kB)
  #61 541.2 Collecting importlib-metadata>=6.5 (from apache-airflow-core@ file:///docker-context-files/apache_airflow_core-3.1.0-py3-none-any.whl)
  #61 541.2   Downloading importlib_metadata-8.6.1-py3-none-any.whl.metadata (4.7 kB)
  #61 542.0   Downloading importlib_metadata-8.6.0-py3-none-any.whl.metadata (4.7 kB)
  #61 542.7   Downloading importlib_metadata-8.5.0-py3-none-any.whl.metadata (4.8 kB)
  #61 543.5   Downloading importlib_metadata-8.4.0-py3-none-any.whl.metadata (4.7 kB)
  #61 544.2   Downloading importlib_metadata-8.3.0-py3-none-any.whl.metadata (4.7 kB)
  #61 545.0   Downloading importlib_metadata-8.2.0-py3-none-any.whl.metadata (4.7 kB)
  #61 545.8   Downloading importlib_metadata-8.1.0-py3-none-any.whl.metadata (4.7 kB)
  #61 546.5   Downloading importlib_metadata-8.0.0-py3-none-any.whl.metadata (4.6 kB)
  #61 547.3   Downloading importlib_metadata-7.2.1-py3-none-any.whl.metadata (4.6 kB)
  #61 548.1   Downloading importlib_metadata-7.2.0-py3-none-any.whl.metadata (4.7 kB)
  #61 548.9   Downloading importlib_metadata-7.1.0-py3-none-any.whl.metadata (4.7 kB)
  #61 549.7   Downloading importlib_metadata-7.0.2-py3-none-any.whl.metadata (4.6 kB)
  #61 550.4   Downloading importlib_metadata-7.0.1-py3-none-any.whl.metadata (4.9 kB)
  #61 551.2   Downloading importlib_metadata-7.0.0-py3-none-any.whl.metadata (4.9 kB)
  #61 552.0   Downloading importlib_metadata-6.11.0-py3-none-any.whl.metadata (4.9 kB)
  #61 552.8   Downloading importlib_metadata-6.10.0-py3-none-any.whl.metadata (4.9 kB)
  #61 553.6   Downloading importlib_metadata-6.9.0-py3-none-any.whl.metadata (4.9 kB)
  #61 554.4   Downloading importlib_metadata-6.8.0-py3-none-any.whl.metadata (5.1 kB)
  #61 555.1   Downloading importlib_metadata-6.7.0-py3-none-any.whl.metadata (4.9 kB)
  #61 556.0   Downloading importlib_metadata-6.6.0-py3-none-any.whl.metadata (5.0 kB)
  #61 556.8   Downloading importlib_metadata-6.5.1-py3-none-any.whl.metadata (5.0 kB)
  #61 557.6   Downloading importlib_metadata-6.5.0-py3-none-any.whl.metadata (5.0 kB)
  #61 6245.5 error: resolution-too-deep
  #61 6245.5 
  #61 6245.5 × Dependency resolution exceeded maximum depth
  #61 6245.5 ╰─> Pip cannot resolve the current dependencies as the dependency graph is too complex for pip to solve efficiently.
  #61 6245.5 
  #61 6245.5 hint: Try adding lower bounds to constrain your dependencies, for example: 'package>=2.0.0' instead of just 'package'.
  #61 6245.5 
  #61 6245.5 Link: https://pip.pypa.io/en/stable/topics/dependency-resolution/#handling-resolution-too-deep-errors

I am trying to address it with https://github.com/apache/airflow/pull/51702 - let's see if it works. But if it does not. The way to repro:

# checkout airflow main
uv tool install -e ./dev/breeze
breeze ci-image build
breeze release-management prepare-airflow-distributions
breeze release-management prepare-task-sdk-distributions
breeze release-management prepare-provider-packages --distributions-list-file ./prod_image_installed_providers.txt
# Here all distribution packages are prepared in dist - we should copy them to docker-context-files
mv dist/* docker-context-files/
# Here docker build will be run (you will see the exact docker build command that is run that attempts to install all those build distributions with `pip`
breeze prod-image build --install-distributions-from-context --airflow-constraints-mode constraints-source-providers --verbose

Update: - easier way to repro (with options for experimentation)

  • checkout airflow
  • Download "prod-packages" artifacts from https://github.com/apache/airflow/actions/runs/15649790380/artifacts/3327747310 (from failed build)
  • Place them in dist folder
  • Remove all installed packages:
    • cd
    • uv init
    • uv sync
  • cd /opt/airflow/dist
  • pip install *

potiuk avatar Jun 14 '25 09:06 potiuk

Unfortunately still resolution too deep: https://github.com/apache/airflow/actions/runs/15647299212/job/44088044699#step:9:5090

potiuk avatar Jun 14 '25 10:06 potiuk

I would like to report a regression from pip 24 to pip 25. Installing the package rasa-pro fails with error: resolution-too-deep

Pip version: 25.1.1 Python version: 3.11.12 Operating system: ubuntu-24.04 Command: pip install rasa-pro

The same command works with pip 24.* This was run within a Github workflow which installed pip==24.3.1. Completed in 2m22s

pip install --upgrade "pip==24.*"
pip install rasa-pro

Edit: This error doesn't happen on pip==25.0.1 but shows up on pip==25.1 and later versions. Edit 2: Rasa Pro pyproject.toml

vcidst avatar Jun 17 '25 09:06 vcidst