-
-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tame the PyPI / Conda mapping chaos #564
Comments
I am happy to unify it and have a final decision over it, that mapping for grayskull was created before all of those tools had that (I think) and it is being populated when necessary. But if there is something else better I am happy with that, I just don't want to add conda-lock as a dependency to grayskull. Maybe we can put that mapping somewhere else and create a virtual package with all the mapping? that should be interesting and conda-lock and grayskull can have a dependency in that package and we all going to have the same data. |
Definitely! 😂 For example, one sane option would be to simply vendor the particular But maybe parselmouth is better, in which case we should figure out how to use that. |
Just my 2 cents. I would recommend having a GitHub repo under an organisation that makes sense to host it, where a file is stored for everyone to download. That would have three advantages:
I'm just a big fan of separation because it has a smaller hurdle for onboarding and everyone can consume it. |
yeah, that is a good idea |
cc @beckermr (who would know where the bot keeps this info as well) |
We supply the bot's mapping behind apis here in the conda-forge-metadata package: https://github.com/conda-forge/conda-forge-metadata/blob/main/conda_forge_metadata/autotick_bot/pypi_to_conda.py The conda-forge-metadata package is distributed on conda-forge and pypi. Use it if you like, but no pressure from me. Even if you decide on something official, the bot's mapping will still be kept here as an api. It lives under the autotick_bot submodule and so should be able to peacefully coexist without confusion. |
I think it's relevant to have a look at conda/ceps#63 ... |
Let's have a quick contest between grayskull vs conda-lock vs parselmouth. I'm going to take the top 5000 PyPI downloads from today and yesterday, as per BigQuery: SELECT
file.project AS package_name,
COUNT(*) AS download_count
FROM `bigquery-public-data.pypi.file_downloads`
WHERE
DATE(timestamp) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) AND CURRENT_DATE()
GROUP BY package_name
ORDER BY download_count DESC
LIMIT 5000 Query result as TSV
import pandas as pd
df = pd.read_csv("top-packages.tsv", sep="\t")
print(df)
Let's start with parselmouth since that's interesting. As far as I can tell, it only goes in the conda-forge → pypi direction. Thus I have to invert the mapping. Of course it's not one-to-one, so the inverse is set-valued. This is unsuitable for our purposes since we actually need a "best match". (There's a lot of work in the non-Grayskull "Grayskull mapping" towards this end.) Rather than disqualifying it outright, I'm going to keep in in, and generously give it credit as long as the "best" result is in the inverse set. (Effectively I'm granting it a perfect solution to the "best match" problem.) import json
from collections import defaultdict
import requests
parselmouth_url = "https://raw.githubusercontent.com/prefix-dev/parselmouth/refs/heads/main/files/compressed_mapping.json"
parselmouth_inv = json.loads(requests.get(parselmouth_url).content)
parselmouth = defaultdict(set)
for k, v in parselmouth_inv.items():
parselmouth[v].add(k)
parselmouth_result = [parselmouth[n] for n in df.package_name] Conda-lock is pretty straightforward: from conda_lock.lookup import DEFAULT_MAPPING_URL, pypi_name_to_conda_name
conda_lock_result = [pypi_name_to_conda_name(n) for n in df.package_name] |
Grayskull was pretty messy to figure out since the logic is stretched between multiple places, but I eventually came up with from grayskull.strategy.pypi import (
Configuration,
merge_requires_dist,
normalize_requirements_list,
)
merged = merge_requires_dist(dict(requires_dist=list(df.package_name)), {})
grayskull_result = normalize_requirements_list(
merged, Configuration(name="dummy-package", version="0.0.0", is_strict_cf=True)
) Computing
merged ["boto3", "urllib3", "botocore", "requests", "charset-normalizer", "setuptools", "certifi", "idna", "packaging", "typing-extensions", "python-dateutil", "aiobotocore", "grpcio-status", "s3transfer", "six", "pyyaml", "fsspec", "s3fs", "cryptography", "numpy", "cffi", "pycparser", "pydantic", "wheel", "importlib-metadata", "attrs", "pip", "pandas", "zipp", "jmespath", "google-api-core", "click", "rsa", "markupsafe", "pyasn1", "platformdirs", "protobuf", "pytz", "colorama", "jinja2", "tomli", "pluggy", "jsonschema", "pyjwt", "pydantic-core", "pytest", "virtualenv", "wrapt", "awscli", "filelock", "rich", "googleapis-common-protos", "cachetools", "aiohttp", "google-auth", "iniconfig", "pygments", "pyparsing", "psutil", "sqlalchemy", "pyasn1-modules", "pyarrow", "yarl", "docutils", "requests-oauthlib", "exceptiongroup", "tzdata", "annotated-types", "multidict", "requests-toolbelt", "oauthlib", "greenlet", "pillow", "grpcio", "soupsieve", "scipy", "isodate", "distlib", "frozenlist", "werkzeug", "decorator", "beautifulsoup4", "aiosignal", "deprecated", "pyopenssl", "tomlkit", "more-itertools", "tqdm", "anyio", "pathspec", "async-timeout", "coverage", "sniffio", "httpx", "h11", "openpyxl", "grpcio-tools", "et-xmlfile", "lxml", "pynacl", "httpcore", "flask", "jsonschema-specifications", "proto-plus", "rpds-py", "msgpack", "azure-core", "python-dotenv", "markdown-it-py", "google-cloud-storage", "websocket-client", "ptyprocess", "mypy_extensions", "propcache", "referencing", "pexpect", "opentelemetry-sdk", "sortedcontainers", "poetry-core", "asn1crypto", "aiohappyeyeballs", "importlib-resources", "mdurl", "tenacity", "gitpython", "itsdangerous", "chardet", "bcrypt", "trove-classifiers", "psycopg2-binary", "msal", "google-cloud-core", "dill", "scikit-learn", "smmap", "gitdb", "paramiko", "wcwidth", "shellingham", "tabulate", "google-resumable-media", "matplotlib", "regex", "backoff", "alembic", "keyring", "pytest-cov", "networkx", "build", "pkginfo", "poetry-plugin-export", "pyproject_hooks", "xmltodict", "fastapi", "blinker", "opentelemetry-api", "sqlparse", "snowflake-connector-python", "google-crc32c", "threadpoolctl", "ruamel_yaml", "jaraco-classes", "py", "kiwisolver", "portalocker", "fastjsonschema", "rapidfuzz", "jeepney", "google-cloud-bigquery", "secretstorage", "asgiref", "gunicorn", "prompt-toolkit", "cycler", "azure-storage-blob", "msal_extensions", "joblib", "py4j", "docker", "mccabe", "marshmallow", "starlette", "dnspython", "fonttools", "azure-identity", "google-api-python-client", "distro", "google-auth-oauthlib", "ipython", "ruamel-yaml-clib", "defusedxml", "types-requests", "toml", "redis", "babel", "typedload", "sentry-sdk", "mako", "argcomplete", "cloudpickle", "black", "cachecontrol", "awswrangler", "pyrsistent", "setuptools-scm", "pycodestyle", "huggingface_hub", "uritemplate", "isort", "nest-asyncio", "installer", "traitlets", "cython", "pendulum", "prometheus_client", "tzlocal", "opentelemetry-semantic-conventions", "httplib2", "openai", "markdown", "termcolor", "poetry", "pymysql", "google-auth-httplib2", "grpc-google-iam-v1", "dulwich", "uvicorn", "crashtest", "tornado", "jedi", "contourpy", "transformers", "parso", "cleo", "ply", "matplotlib-inline", "jsonpointer", "msrest", "websockets", "debugpy", "webencodings", "scramp", "azure-common", "croniter", "typer", "pycryptodome", "pycryptodomex", "kubernetes", "executing", "asttokens", "pyzmq", "mypy", "pyflakes", "pygithub", "orjson", "stack_data", "future", "pure_eval", "python-json-logger", "requests-aws4auth", "types-python-dateutil", "retry", "loguru", "humanfriendly", "multiprocess", "pre-commit", "flake8", "ipykernel", "nodeenv", "opentelemetry-proto", "arrow", "typing_inspect", "google-cloud-secret-manager", "datadog", "elasticsearch", "python-slugify", "grpcio-health-checking", "redshift_connector", "jupyter_core", "pytzdata", "pymongo", "shapely", "jupyter_client", "pytest-mock", "aioitertools", "semver", "astroid", "lazy-object-proxy", "torch", "pytest-xdist", "tokenizers", "rfc3339-validator", "identify", "pytest-runner", "jsonpatch", "sympy", "pg8000", "bs4", "cfgv", "zope-interface", "smart-open", "pylint", "setproctitle", "hatchling", "pysocks", "nbconvert", "pkgutil-resolve-name", "opentelemetry-exporter-otlp-proto-http", "ruff", "mysql-connector-python", "pyspark", "google-pasta", "aiofiles", "apache-airflow", "execnet", "oscrypto", "sphinx", "comm", "nbformat", "toolz", "jupyter_server", "adal", "slack-sdk", "opentelemetry-exporter-otlp-proto-grpc", "google-cloud-pubsub", "typeguard", "watchdog", "jsonpath-ng", "ordered-set", "requests-file", "text-unidecode", "tinycss2", "snowflake-sqlalchemy", "mock", "bleach", "opensearch-py", "cattrs", "nbclient", "mistune", "imageio", "sagemaker", "notebook", "colorlog", "responses", "mpmath", "appdirs", "xgboost", "jupyterlab_server", "email-validator", "opentelemetry-exporter-otlp", "xlsxwriter", "hypothesis", "xlrd", "pyodbc", "lz4", "jupyterlab", "pbr", "mdit-py-plugins", "tiktoken", "pydantic-settings", "google-cloud-aiplatform", "aenum", "argon2-cffi", "schema", "apache-airflow-providers-common-sql", "graphql-core", "db-dtypes", "absl-py", "sshtunnel", "pytest-error-for-skips", "flask-caching", "pytest-asyncio", "structlog", "progressbar2", "argon2-cffi-bindings", "google-cloud-appengine-logging", "python-multipart", "dataclasses-json", "simplejson", "tb-nightly", "json5", "ipywidgets", "overrides", "azure-mgmt-core", "uvloop", "opentelemetry-exporter-otlp-proto-common", "pandas-gbq", "altair", "tensorboard", "databricks-sql-connector", "httptools", "jaraco-functools", "jupyterlab_pygments", "google-cloud-resource-manager", "widgetsnbextension", "google-cloud-logging", "tox", "pandocfilters", "inflection", "azure-datalake-store", "jupyterlab_widgets", "antlr4-python3-runtime", "azure-storage-file-datalake", "python-utils", "coloredlogs", "send2trash", "selenium", "pathos", "watchfiles", "pyathena", "faker", "sentencepiece", "langchain-core", "hvac", "jiter", "h5py", "webcolors", "pox", "types-pyyaml", "ppft", "django", "gcsfs", "flatbuffers", "docstring_parser", "time-machine", "azure-mgmt-resource", "prettytable", "jaraco-context", "snowballstemmer", "flask-wtf", "terminado", "fqdn", "aws-requests-auth", "plotly", "notebook-shim", "msrestazure", "uri-template", "google-cloud-bigquery-storage", "isoduration", "smdebug-rulesconfig", "nltk", "click-plugins", "click-man", "rfc3986-validator", "jupyter_events", "seaborn", "docker-pycreds", "lockfile", "asynctest", "tensorflow", "langchain", "monotonic", "oauth2client", "wsproto", "safetensors", "trio", "great-expectations", "async-lru", "wandb", "numba", "html5lib", "pydeequ", "dataclasses", "jupyter_server_terminals", "durationpy", "scikit-image", "uv", "datasets", "llvmlite", "databricks-sdk", "entrypoints", "azure-mgmt-storage", "deepdiff", "linkify-it-py", "rfc3986", "gast", "azure-cli", "opentelemetry-instrumentation", "azure-keyvault-secrets", "jupyter-lsp", "psycopg2", "statsmodels", "confluent-kafka", "thrift", "universal_pathlib", "triton", "zeep", "pydata-google-auth", "dbt-core", "rich-argparse", "deprecation", "imbalanced-learn", "nvidia-nccl-cu12", "google-cloud-audit-log", "gremlinpython", "outcome", "alabaster", "mlflow", "authlib", "tblib", "amqp", "gevent", "azure-cosmos", "cached-property", "imagesize", "azure-mgmt-containerregistry", "xxhash", "sphinxcontrib-serializinghtml", "semantic_version", "torchvision", "invoke", "freezegun", "azure-mgmt-cosmosdb", "sphinxcontrib-htmlhelp", "ujson", "opencv-python", "flask-appbuilder", "looker-sdk", "sphinxcontrib-applehelp", "kombu", "sphinxcontrib-qthelp", "retrying", "moto", "pymssql", "sphinxcontrib-devhelp", "azure-nspkg", "google-cloud-dataproc", "patsy", "marshmallow-oneofschema", "graphviz", "libcst", "azure-storage-common", "google-re2", "brotli", "azure-keyvault-keys", "pickleshare", "argparse", "mypy-boto3-s3", "nvidia-cublas-cu12", "nvidia-cudnn-cu12", "pywavelets", "delta-spark", "vine", "applicationinsights", "celery", "flask-session", "sphinxcontrib-jsmath", "fastavro", "kafka-python", "tensorboard-data-server", "mlflow-skinny", "python-daemon", "backports-tarfile", "trio-websocket", "editables", "google-cloud-monitoring", "nvidia-cuda-runtime-cu12", "billiard", "nvidia-cuda-cupti-cu12", "nvidia-cusparse-cu12", "nvidia-cufft-cu12", "google-cloud-kms", "nvidia-cuda-nvrtc-cu12", "google-cloud-vision", "nvidia-nvjitlink-cu12", "apispec", "azure-keyvault", "keras", "connexion", "nvidia-curand-cu12", "unidecode", "flask-login", "zstandard", "google-cloud-spanner", "backcall", "google-cloud-firestore", "nvidia-nvtx-cu12", "jsondiff", "types-protobuf", "nvidia-cusolver-cu12", "zope-event", "langsmith", "simple-salesforce", "databricks-cli", "azure-graphrbac", "azure-mgmt-containerinstance", "azure-batch", "pywin32", "google-cloud-dlp", "pyroaring", "flask-cors", "google-cloud-container", "ddtrace", "pipenv", "boto3-stubs", "google-ads", "apache-airflow-providers-snowflake", "opt-einsum", "flask-sqlalchemy", "google-cloud-bigquery-datatransfer", "sqlalchemy-utils", "wtforms", "google-cloud-tasks", "graphene", "google-cloud-bigtable", "docopt", "azure-mgmt-compute", "azure-mgmt-authorization", "google-cloud-datacatalog", "pyproject-api", "pip-tools", "apache-airflow-providers-ssh", "botocore-stubs", "astunparse", "pytimeparse", "azure-mgmt-keyvault", "ijson", "cachelib", "opentelemetry-util-http", "tensorflow-estimator", "pytest-metadata", "azure-mgmt-network", "ecdsa", "apache-airflow-providers-cncf-kubernetes", "graphql-relay", "types-pytz", "azure-mgmt-msi", "hpack", "dask", "humanize", "scp", "apache-airflow-providers-google", "watchtower", "backports-zoneinfo", "langchain-community", "click-repl", "pathlib2", "h2", "click-didyoumean", "google-cloud-build", "hyperframe", "ninja", "google-cloud-language", "types-awscrt", "azure-mgmt-recoveryservices", "gsutil", "fabric", "google-cloud-workflows", "pybind11", "google-cloud-videointelligence", "analytics-python", "google-cloud-redis", "azure-data-tables", "google-cloud-automl", "makefun", "configupdater", "azure-mgmt-signalr", "azure-mgmt-monitor", "awscrt", "jira", "apache-airflow-providers-databricks", "sqlalchemy-bigquery", "types-setuptools", "azure-mgmt-sql", "google-cloud-dataplex", "google-cloud-os-login", "azure-mgmt-servicebus", "azure-mgmt-web", "cfn-lint", "mypy_boto3_rds", "google-cloud-translate", "azure-mgmt-containerservice", "google-cloud-memcache", "jsonpickle", "omegaconf", "azure-mgmt-datalake-store", "azure-mgmt-redis", "spacy", "agate", "sh", "gspread", "apache-airflow-providers-mysql", "configparser", "mysqlclient", "parameterized", "azure-synapse-artifacts", "azure-mgmt-rdbms", "azure-mgmt-dns", "azure-mgmt-nspkg", "google-cloud-orchestration-airflow", "types-s3transfer", "azure-mgmt-advisor", "google-cloud-dataproc-metastore", "azure-mgmt-eventhub", "mashumaro", "google-cloud-compute", "psycopg", "pytest-rerunfailures", "knack", "azure-cli-core", "google-cloud-speech", "gcloud-aio-storage", "gcloud-aio-auth", "azure-mgmt-batch", "azure-mgmt-managementgroups", "azure-mgmt-loganalytics", "azure-mgmt-cdn", "azure-mgmt-cognitiveservices", "azure-mgmt-datalake-nspkg", "azure-mgmt-search", "azure-mgmt-trafficmanager", "azure-mgmt-recoveryservicesbackup", "azure-mgmt-iothub", "google-cloud-dataform", "azure-mgmt-marketplaceordering", "azure-mgmt-devtestlabs", "python-gitlab", "azure-mgmt-eventgrid", "google-cloud-texttospeech", "azure-mgmt-applicationinsights", "azure-mgmt-servicefabric", "azure-mgmt-media", "azure-mgmt-billing", "azure-mgmt-policyinsights", "azure-mgmt-iothubprovisioningservices", "azure-mgmt-batchai", "azure-mgmt-datamigration", "pytest-timeout", "azure-appconfiguration", "azure-mgmt-iotcentral", "azure-mgmt-maps", "narwhals", "thinc", "gcloud-aio-bigquery", "parsedatetime", "python-jose", "readme_renderer", "apache-airflow-providers-http", "libclang", "requests-mock", "uc-micro-py", "funcsigs", "pkce", "pycountry", "datetime", "azure-synapse-spark", "mergedeep", "djangorestframework", "pysftp", "azure-multiapi-storage", "sqlalchemy-jsonfield", "texttable", "evergreen-py", "levenshtein", "nh3", "pypdf2", "pytest-html", "tensorflow-io-gcs-filesystem", "twine", "lark", "opencensus", "pyproj", "types-urllib3", "commonmark", "grpcio-gcp", "envier", "marshmallow-sqlalchemy", "onnxruntime", "python-magic", "opencensus-context", "blis", "stevedore", "tldextract", "flask-jwt-extended", "azure-mgmt-datalake-analytics", "javaproperties", "cron-descriptor", "ml_dtypes", "ndg-httpsclient", "pycrypto", "bytecode", "python-gnupg", "azure-mgmt-reservations", "azure-loganalytics", "azure-mgmt-consumption", "sendgrid", "types-redis", "azure-mgmt-relay", "contextlib2", "azure-cli-telemetry", "azure-mgmt-apimanagement", "elastic-transport", "lightgbm", "python_http_client", "limits", "azure-mgmt-privatedns", "db-contrib-tool", "azure-mgmt-hdinsight", "langchain-text-splitters", "geopandas", "validators", "ratelimit", "azure-mgmt-kusto", "azure-mgmt-synapse", "azure-mgmt-security", "pyserial", "cramjam", "jupyter_console", "parse", "azure-mgmt-netapp", "azure-synapse-accesscontrol", "azure-mgmt-redhatopenshift", "azure-mgmt-appconfiguration", "azure-mgmt-sqlvirtualmachine", "azure-keyvault-administration", "flask-limiter", "azure-mgmt-imagebuilder", "fasteners", "azure-mgmt-botservice", "nose", "jpype1", "cymem", "azure-mgmt-databoxedge", "azure-synapse-managedprivateendpoints", "azure-mgmt-servicelinker", "azure-mgmt-servicefabricmanagedclusters", "azure-mgmt-extendedlocation", "murmurhash", "yapf", "leather", "dbt-common", "dbt-extractor", "azure-kusto-data", "preshed", "phonenumbers", "catalogue", "asyncpg", "urllib3-secure-extra", "jupyter", "tensorflow-serving-api", "yamllint", "azure-servicebus", "boto", "srsly", "cfn-flip", "parsimonious", "azure-storage-queue", "wasabi", "cmake", "pypdf", "apache-beam", "py-cpuinfo", "langcodes", "opencensus-ext-azure", "aliyun-python-sdk-core", "polars", "aws-xray-sdk", "azure-mgmt-datafactory", "cytoolz", "openapi-spec-validator", "tifffile", "dbt-semantic-interfaces", "eth-utils", "fastapi-cli", "gradio", "avro", "apache-airflow-providers-ftp", "google-cloud-dataflow-client", "opentelemetry-instrumentation-requests", "astor", "azure-mgmt-managedservices", "office365-rest-python-client", "dacite", "accelerate", "bitarray", "holidays", "spacy-legacy", "apscheduler", "typing", "prefect", "eth-hash", "pyspnego", "spacy-loggers", "avro-python3", "resolvelib", "protobuf3-to-dict", "gql", "eth-typing", "lazy-loader", "aniso8601", "google-cloud-run", "psycopg-binary", "dateparser", "azure-mgmt-deploymentmanager", "inflect", "fastparquet", "apache-airflow-providers-sqlite", "pytest-random-order", "pydantic-extra-types", "confection", "mmh3", "fuzzywuzzy", "cligj", "azure-storage-file-share", "clickclick", "flask-babel", "cloudpathlib", "oracledb", "apache-airflow-providers-fab", "methodtools", "diskcache", "partd", "types-dataclasses", "frozendict", "jaydebeapi", "bracex", "google-cloud-storage-transfer", "django-cors-headers", "python-levenshtein", "sphinx-rtd-theme", "pyee", "google-cloud-batch", "langchain-openai", "pytest-localserver", "hyperlink", "griffe", "cssselect", "eth-abi", "pep517", "torchmetrics", "wirerope", "statsd", "yappi", "enum34", "aws-sam-translator", "fastcore", "mypy-boto3-appflow", "prison", "starkbank-ecdsa", "tensorflow-text", "locket", "xarray", "querystring_parser", "iso8601", "cloudformation-cli", "opencv-python-headless", "pydot", "ray", "netaddr", "cloudformation-cli-java-plugin", "cloudformation-cli-python-plugin", "cloudformation-cli-go-plugin", "cloudformation-cli-typescript-plugin", "typed-ast", "oldest-supported-numpy", "tableauserverclient", "pymdown-extensions", "pytorch-lightning", "openapi-schema-validator", "onnx", "sqlglot", "duckdb", "incremental", "pathlib", "mkdocs-material", "apache-airflow-providers-imap", "trino", "iso3166", "sentence-transformers", "opentelemetry-instrumentation-asgi", "sqlalchemy-spanner", "kubernetes_asyncio", "passlib", "unicodecsv", "streamlit", "ipython_genutils", "logbook", "python-docx", "kfp", "datadog-api-client", "lightning-utilities", "stripe", "shap", "ansible", "pydub", "slicer", "ansible-core", "configargparse", "factory_boy", "wcmatch", "torchaudio", "edgegrid-python", "junit-xml", "natsort", "django-filter", "opentelemetry-instrumentation-fastapi", "dbt-adapters", "fire", "magicattr", "json-repair", "weaviate-client", "junitparser", "marisa-trie", "nvidia-cublas-cu11", "slackclient", "mypy-protobuf", "marshmallow-enum", "pydash", "autopep8", "aws-lambda-powertools", "reportlab", "nvidia-cudnn-cu11", "keyrings-google-artifactregistry-auth", "fiona", "events", "twisted", "crcmod", "language-data", "geographiclib", "apache-airflow-providers-slack", "requests_ntlm", "pywin32-ctypes", "h3", "toposort", "sphinx-autodoc-typehints", "geopy", "playwright", "boltons", "grpc-interceptor", "bandit", "apache-airflow-providers-amazon", "adlfs", "cssselect2", "pika", "nvidia-cuda-runtime-cu11", "pandas-stubs", "nvidia-cuda-nvrtc-cu11", "apache-airflow-providers-smtp", "mypy-boto3-redshift-data", "minimal-snowplow-tracker", "einops", "pydeck", "constructs", "ldap3", "pyhcl", "sphinxcontrib-jquery", "faiss-cpu", "geoip2", "inject", "apache-airflow-providers-common-io", "automat", "azure-keyvault-certificates", "constantly", "textual", "more-executors", "astronomer-cosmos", "weasel", "jellyfish", "openxlab", "ftfy", "fastpurge", "checkov", "sqlalchemy-redshift", "waitress", "strenum", "hiredis", "pyotp", "pytest-django", "py-partiql-parser", "twilio", "futures", "cohere", "google-cloud", "pdfminer-six", "aiohttp-retry", "pymupdf", "ddsketch", "pyright", "mkdocs", "setuptools-rust", "langchain-google-vertexai", "timm", "python-decouple", "keras-applications", "ua-parser", "maxminddb", "pytest-env", "eval-type-backport", "pytest-forked", "types-pyopenssl", "jsonref", "azure-devops", "json-merge-patch", "aiosqlite", "deltalake", "ultralytics", "ciso8601", "tomli-w", "numexpr", "flit-core", "elasticsearch-dsl", "qrcode", "pydocstyle", "webdriver-manager", "immutabledict", "userpath", "distributed", "pyelftools", "google-analytics-admin", "python-nvd3", "bottle", "prefect-gcp", "jsonlines", "asyncio", "snowflake-snowpark-python", "mypy_boto3_sqs", "bidict", "filetype", "mypy_boto3_dynamodb", "posthog", "ghp-import", "rdflib", "django-extensions", "pyerfa", "pgpy", "types-paramiko", "apache-airflow-providers-common-compat", "asyncssh", "pyyaml-env-tag", "atlassian-python-api", "pyperclip", "pytest-split", "chroma-hnswlib", "firebase-admin", "webob", "click-option-group", "mypy-boto3-secretsmanager", "swagger-ui-bundle", "emoji", "pipx", "google", "ipdb", "teradatasql", "azure-eventhub", "diff-cover", "mypy-boto3-glue", "gradio-client", "strictyaml", "cloudevents", "binaryornot", "albumentations", "azure-kusto-ingest", "service-identity", "pyrfc3339", "multimethod", "dask-expr", "face", "types-six", "pycares", "glom", "prometheus_flask_exporter", "optree", "pandera", "django-storages", "types-toml", "pytest-randomly", "pyarrow-hotfix", "types-cachetools", "sql-metadata", "mypy_boto3_lambda", "formulaic", "tensorboard-plugin-wit", "anthropic", "cx_oracle", "tokenize-rt", "pyaml", "parse_type", "rasterio", "gensim", "eth-account", "kfp-pipeline-spec", "opentelemetry-instrumentation-wsgi", "aiodns", "dbt-snowflake", "mkdocs-material-extensions", "ipaddress", "django-redis", "peewee", "jsii", "xlwt", "python-jenkins", "types-cffi", "affine", "tensorboardx", "pytz-deprecation-shim", "cookiecutter", "litellm", "hatch-vcs", "jax", "optuna", "pathy", "langdetect", "orderedmultidict", "msgspec", "xyzservices", "apprise", "fs", "sklearn", "microsoft-kiota-http", "keras-preprocessing", "imapclient", "grpcio-reflection", "atomicwrites", "feedparser", "mongomock", "bokeh", "pyphen", "python-engineio", "orderly-set", "nested-lookup", "python-socketio", "blessed", "smbprotocol", "furl", "schedule", "namex", "pooch", "addict", "dbt-postgres", "dash", "convertdate", "pytest-benchmark", "jwcrypto", "minio", "pypika", "functions-framework", "w3lib", "publication", "uamqp", "meson", "jaxlib", "spark-nlp", "cerberus", "pathable", "nbclassic", "tweepy", "stringcase", "influxdb-client", "python3-saml", "filterpy", "questionary", "python3-openid", "autograd", "flake8-bugbear", "types-docutils", "acryl-datahub", "unittest-xml-reporting", "undetected-chromedriver", "eventlet", "aioboto3", "flower", "tensorflow-metadata", "types-tabulate", "korean_lunar_calendar", "python-box", "daff", "readchar", "shortuuid", "microsoft-kiota-abstractions", "async_generator", "appnope", "dpath", "beartype", "altgraph", "expiringdict", "py-spy", "zipfile38", "catboost", "aioresponses", "robotframework", "geventhttpclient", "yq", "mypy_boto3_cloudformation", "mypy_boto3_ec2", "moreorless", "kaleido", "hydra-core", "soda-core", "python-snappy", "elementpath", "pyqt5", "whitenoise", "mkdocs-get-deps", "simple-websocket", "pyhumps", "ffmpy", "construct", "openlineage-integration-common", "hyperpyyaml", "speechbrain", "user-agents", "django-debug-toolbar", "mixpanel", "pyhocon", "myst-parser", "cog", "pipdeptree", "fakeredis", "ghapi", "facebook_business", "pymsteams", "autoflake", "cssutils", "flask-restful", "dash-core-components", "maturin", "opentelemetry-instrumentation-dbapi", "singer-sdk", "weasyprint", "dash-table", "dash-html-components", "html5lib-modern", "launchdarkly-server-sdk", "marshmallow-dataclass", "opentelemetry-instrumentation-flask", "click-default-group", "pygame", "enum-compat", "pyinstaller", "unidiff", "librosa", "num2words", "mypy-boto3-sts", "trailrunner", "url-normalize", "sagemaker-core", "sagemaker-mlflow", "kfp-server-api", "azure-monitor-query", "vcrpy", "drf-spectacular", "paginate", "colorful", "cassandra-driver", "opentelemetry-distro", "rich-click", "configobj", "flask-migrate", "stdlibs", "paho-mqtt", "fake-useragent", "usort", "opentelemetry-instrumentation-urllib3", "openlineage-sql", "hdfs", "apache-airflow-providers-sftp", "dm-tree", "kazoo", "python-telegram-bot", "pyinstaller-hooks-contrib", "sphinx-copybutton", "azure-cosmosdb-table", "jsonschema-path", "ufmt", "pyqt5-sip", "locust", "pulp", "pypng", "xmlschema", "qtpy", "aiohttp-cors", "azure-cosmosdb-nspkg", "opentelemetry-instrumentation-urllib", "dunamai", "interface_meta", "llama-parse", "comtypes", "dbt-bigquery", "meson-python", "boto3-stubs-lite", "yandexcloud", "web3", "nox", "asana", "allure-python-commons", "llama-index", "cmdstanpy", "hexbytes", "pyhive", "modin", "xmlsec", "opentelemetry-instrumentation-logging", "python-editor", "semgrep", "pyproject-metadata", "pypandoc", "pkgconfig", "memray", "pytest-doctestplus", "pgvector", "extension-helpers", "voluptuous", "soundfile", "scikit-build-core", "html2text", "pyogrio", "motor", "olefile", "sphinx-design", "lightning", "sqlfluff", "djangorestframework_simplejwt", "pdf2image", "pyxlsb", "azure-storage-file", "django-environ", "hatch", "recordlinkage", "netcdf4", "deepmerge", "uuid", "pynamodb", "pinecone-client", "django-timezone-field", "prophet", "pytest-remotedata", "lru-dict", "jdcal", "msgraph-core", "fpdf", "httpx-sse", "azureml-core", "qtconsole", "types-deprecated", "pymeeus", "peft", "zope-deprecation", "requests-cache", "pytest-filter-subpackage", "google-cloud-datastore", "netifaces", "sseclient-py", "evaluate", "azure-functions", "multipledispatch", "drf-yasg", "testcontainers", "plotnine", "pikepdf", "influxdb", "types-croniter", "types-markdown", "snuggs", "terminaltables", "opentelemetry-instrumentation-psycopg2", "cftime", "colour", "syrupy", "pytest-arraydiff", "eth-rlp", "llama-index-core", "pytest-astropy", "pytest-astropy-header", "nvidia-ml-py", "hatch-fancy-pypi-readme", "sphinx-autoapi", "sacrebleu", "hijri-converter", "aws-cdk-lib", "pdfplumber", "python-crontab", "apache-airflow-providers-docker", "pex", "pyfiglet", "qdrant-client", "pypdfium2", "clickhouse-connect", "python-pptx", "imageio-ffmpeg", "lxml-html-clean", "opentelemetry-instrumentation-django", "dynaconf", "uritools", "pyusb", "pytest-openfiles", "pastedeploy", "azure-monitor-opentelemetry-exporter", "concurrent-log-handler", "pytest-messenger", "json-log-formatter", "aws-cdk-asset-awscli-v1", "geomet", "zict", "opentelemetry-exporter-prometheus", "mizani", "pastel", "pywinauto", "pprintpp", "astropy", "apache-sedona", "pyqt5-qt5", "geojson", "timezonefinder", "amazon-ion", "pycocotools", "aiofile", "chromadb", "pyzstd", "ortools", "pystache", "pathvalidate", "scandir", "eth-keys", "clickhouse-driver", "pytesseract", "zopfli", "yfinance", "aws-psycopg2", "papermill", "aws-cdk-integ-tests-alpha", "expandvars", "tlparse", "av", "avro-gen3", "packageurl-python", "apache-airflow-providers-postgres", "py7zr", "azure-eventgrid", "sacremoses", "lifelines", "mkdocstrings-python", "pyinstrument", "sqlmodel", "pyppeteer", "pytest-sugar", "allure-pytest", "google-apitools", "types-pymysql", "thrift_sasl", "caio", "hyperopt", "airbyte-api", "diffusers", "newrelic", "python-arango", "flask-httpauth", "datasketch", "soxr", "diff-match-patch", "environs", "proglog", "jsonargparse", "cleanco", "azure-search-documents", "boolean-py", "fixedint", "pytest-repeat", "memory_profiler", "commentjson", "yamale", "sgmllib3k", "dynamodb-json", "microsoft-kiota-authentication-azure", "click-spinner", "pymupdfb", "dictdiffer", "plumbum", "bitstring", "license-expression", "alibabacloud-adb20211201", "unstructured-client", "promise", "pytest-base-url", "bitsandbytes", "pep8-naming", "aws-cdk-asset-kubectl-v20", "appium-python-client", "pytest-json-report", "types-pillow", "pypiwin32", "flaky", "s3path", "anytree", "lit", "poetry-dynamic-versioning", "audioread", "flask-restx", "pydyf", "findspark", "atpublic", "ffmpeg-python", "pytest-custom-exit-code", "chevron", "pyiceberg", "pyppmd", "google-cloud-pubsublite", "langgraph", "multi_key_dict", "yt-dlp", "stanio", "pdpyras", "pamqp", "grimp", "python-pam", "opentelemetry-instrumentation-grpc", "apache-airflow-providers-microsoft-mssql", "oss2", "opsgenie-sdk", "pmdarima", "pybcj", "mbstrdecoder", "patchelf", "cyclonedx-python-lib", "databricks-api", "injector", "rollbar", "ultralytics-thop", "repoze-lru", "bump2version", "behave", "psycopg-pool", "markdown2", "osqp", "objsize", "immutables", "multivolumefile", "pykwalify", "wget", "iopath", "typepy", "databricks-connect", "django-stubs", "pint", "fasttext", "types-psutil", "datefinder", "polling", "opencv-contrib-python", "simpleeval", "pyreadline3", "openlineage-python", "opencensus-ext-logging", "biopython", "shtab", "microsoft-kiota-serialization-json", "types-pygments", "sqlglotrs", "jq", "tablib", "pytest-order", "rlp", "trimesh", "pyquery", "genson", "jsonpath-python", "types-cryptography", "unearth", "types-simplejson", "cbor2", "types-jsonschema", "python-bidi", "venusian", "o365", "python-consul", "jaconv", "sphinxcontrib-mermaid", "teradatasqlalchemy", "haversine", "google-generativeai", "types-psycopg2", "objgraph", "hupper", "pymemcache", "multipart", "translationstring", "singledispatch", "soda-core-snowflake", "django-celery-beat", "zc-lockfile", "pyhamcrest", "ansible-compat", "django-stubs-ext", "azure-mgmt-subscription", "types-html5lib", "pygsheets", "memoization", "svgwrite", "python-crfsuite", "rtree", "flask-bcrypt", "elementary-data", "python-ldap", "blobfile", "pyhanko", "mysql-connector", "salesforce-bulk", "azure", "inflate64", "astropy-iers-data", "pyramid", "cairocffi", "pygeohash", "mkdocstrings", "boa-str", "google-ai-generativelanguage", "dbutils", "segment-analytics-python", "types-mock", "pefile", "joserfc", "pygit2", "eth-keyfile", "jsonconversion", "pympler", "ifaddr", "socksio", "cairosvg", "dependency_injector", "backports-functools-lru-cache", "funcy", "mypy-boto3-iam", "thefuzz", "ec2-metadata", "pycurl", "pathlib-abc", "requests-futures", "hologram", "aws-cdk-asset-node-proxy-agent-v6", "premailer", "cloud-sql-python-connector", "autobahn", "pyfakefs", "pytd", "strip-hints", "mypy-boto3-ssm", "etils", "py-serializable", "neo4j", "kornia", "docker-compose", "txaio", "boto3-type-annotations", "fpdf2", "onnxruntime-gpu", "cvxpy", "reactivex", "pylint-plugin-utils", "sarif-om", "flask-openid", "aiokafka", "gdown", "buildkite-test-collector", "jwt", "jschema-to-python", "itypes", "lark-parser", "mmcif_pdbx", "propka", "robotframework-pythonlibcore", "vertica-python", "dj-database-url", "pdb2pqr", "alchemlyb", "django-simple-history", "virtualenv-clone", "dropbox", "pynvml", "plaster", "plaster_pastedeploy", "types-aiofiles", "python-rapidjson", "sentinels", "dagster", "subprocess-tee", "umap-learn", "webargs", "notion-client", "pytest-playwright", "pynndescent", "safety", "dominate", "coreapi", "boxsdk", "dagster-pandas", "mypy-boto3-ecr", "rfc3987", "tensorflow-datasets", "django-appconf", "yaspin", "curlify", "types-certifi", "pytest-subtests", "azure-mgmt-notificationhubs", "pywinpty", "chispa", "django-model-utils", "microsoft-kiota-serialization-text", "pyaes", "signalfx", "llama-index-llms-openai", "prometheus-fastapi-instrumentator", "torchtext", "munch", "redis-py-cluster", "inquirer", "wordcloud", "diagrams", "hjson", "graphframes", "jproperties", "jieba", "unstructured", "bashlex", "requests-aws-sign", "testpath", "cloudflare", "pytest-instafail", "mkdocs-autorefs", "sphinx-argparse", "riot", "shareplum", "datamodel-code-generator", "googlemaps", "flake8-docstrings", "robotframework-seleniumlibrary", "flask-compress", "python-iso639", "codespell", "pdfkit", "google-cloud-trace", "flatten_json", "morefs", "ephem", "hatch-requirements-txt", "azure-monitor-opentelemetry", "dagster-spark", "google-cloud-recommendations-ai", "azure-mgmt-logic", "grpc-stubs", "dagster-pipes", "azure-core-tracing-opentelemetry", "backports-weakref", "supervisor", "jsonpath-rw", "tensorflow-hub", "cheroot", "scapy", "std-uritemplate", "click-help-colors", "ckzg", "mutagen", "types-decorator", "ecos", "ecs-logging", "aliyun-python-sdk-kms", "cdk-nag", "sqlalchemy2-stubs", "timeout-decorator", "pyclipper", "rustworkx", "uwsgi", "azure-mgmt", "qdldl", "azure-mgmt-scheduler", "sounddevice", "channels", "azure-servicefabric", "tzfpy", "python-hcl2", "azure-mgmt-commerce", "tsx", "ulid-py", "azure-mgmt-powerbiembedded", "markdownify", "mypy-boto3-athena", "scs", "throttlex", "pure-sasl", "opentracing", "streamerate", "types-beautifulsoup4", "pdm", "azure-mgmt-hanaonazure", "sparkorm", "folium", "azure-servicemanagement-legacy", "sqlparams", "azure-mgmt-machinelearningcompute", "azure-mgmt-managementpartner", "pydispatcher", "codeowners", "bitstruct", "opentelemetry-resource-detector-azure", "torchsde", "pytest-ordering", "azureml-dataprep", "anyascii", "bottleneck", "gprof2dot", "flashtext", "dparse", "pylint-django", "igraph", "pinotdb", "opentelemetry-instrumentation-sqlalchemy", "findpython", "launchdarkly-eventsource", "xformers", "azure-mgmt-devspaces", "python-can", "pyudev", "hishel", "prefect-aws", "numcodecs", "checksumdir", "robotframework-requests", "truststore", "yacs", "pyunormalize", "django-phonenumber-field", "insight-cli", "mongoengine", "clang-format", "types-ujson", "boostedblob", "asgi-lifespan", "multitasking", "django-celery-results", "azure-applicationinsights", "flexparser", "flexcache", "trampoline", "pipelinewise-singer-python", "imagehash", "llama-index-agent-openai", "branca", "rq", "tableauhyperapi", "azureml-dataprep-rslex", "dbt-redshift", "category_encoders", "j2cli", "import-linter", "conan", "opentelemetry-propagator-aws-xray", "pytest-check", "pbs-installer", "tf-keras", "priority", "pyramid_debugtoolbar", "dep-logic", "pycomposefile", "tecton", "github3-py", "azure-ai-ml", "smartsheet-python-sdk", "port-for", "types-freezegun", "temporalio", "django-otp", "pyramid_mako", "fasttext-wheel", "pytest-socket", "dirtyjson", "geoalchemy2", "pywinrm", "pytimeparse2", "databricks", "django-ipware", "python-xlib", "portpicker", "intelhex", "opentelemetry-instrumentation-redis", "pydevd", "zarr", "textblob", "python-stdnum", "autograd-gamma", "slack-bolt", "vulture", "logging-azure-rest", "hdbcli", "pyramid-jinja2", "about-time", "backports-tempfile", "pydata-sphinx-theme", "databricks-pypi1", "types-python-slugify", "dockerfile-parse", "alive-progress", "python-keycloak", "flask-socketio", "opentelemetry-exporter-gcp-trace", "pytest-icdiff", "lmdb", "types-aiobotocore", "presto-python-client", "mypy-boto3-stepfunctions", "ws4py", "nvidia-cufft-cu11", "country_converter", "testfixtures", "grpclib", "blosc2", "llama-index-readers-file", "types-tqdm", "hypercorn", "phonenumberslite", "opentelemetry-instrumentation-aiohttp-client", "llama-index-indices-managed-llama-cloud", "nvidia-cusolver-cu11", "requests-sigv4", "parsel", "dnslib", "towncrier", "zeroconf", "striprtf", "langgraph-checkpoint", "social-auth-core", "django-countries", "webtest", "aws-cdk-cloud-assembly-schema", "mypy-boto3-ecs", "ruptures", "stone", "nvidia-cuda-cupti-cu11", "nvidia-cusparse-cu11", "django-crispy-forms", "zstd", "types-markupsafe", "pulumi", "ansible-lint", "pyexasol", "nvidia-curand-cu11", "flake8-isort", "github-heatmap", "pytest-bdd", "requests-html", "langchain-experimental", "orbax-checkpoint", "editorconfig", "gitdb2", "types-jinja2", "strawberry-graphql", "json-delta", "editdistance", "nvidia-nccl-cu11", "sqlfluff-templater-dbt", "pandasql", "opentelemetry-resourcedetector-gcp", "pyformance", "nvidia-nvtx-cu11", "tensorflow-probability", "jupytext", "icdiff", "rdkit", "furo", "tld", "verboselogs", "dicttoxml", "gcovr", "opentelemetry-instrumentation-botocore", "pyluach", "aiormq", "dogpile-cache", "coreschema", "gym-notices", "aio-pika", "intervaltree", "daphne", "koalas", "types-click", "jsbeautifier", "pytest-httpserver", "moviepy", "requirements-parser", "codecov", "skl2onnx", "onnxconverter-common", "flake8-comprehensions", "imagecodecs", "probableparsing", "base58", "coveralls", "c7n", "mypy-boto3-kinesis", "mypy-boto3-emr", "patch-ng", "bumpversion", "node-semver", "django-import-export", "elastic-apm", "oci", "tensorflow-intel", "pylance", "azure-mgmt-appcontainers", "backports-cached-property", "tree_sitter", "rx", "ansi2html", "gspread-dataframe", "plyvel", "js2py", "coolname", "usaddress", "dbt-spark", "kornia-rs", "pip-requirements-parser", "polib", "pyandoc", "aws-sam-cli", "dbus-fast", "clarabel", "python-ulid", "tables", "ydata-profiling", "mirakuru", "gs-quant", "queuelib", "pyairtable", "mypy-boto3-sagemaker", "tritonclient", "tensorstore", "click-log", "llama-index-readers-llama-parse", "mss", "htmlmin", "langchain-aws", "types-pyserial", "arabic_reshaper", "open-clip-torch", "poethepoet", "dataproperty", "sse-starlette", "ntlm-auth", "scrapy", "tcolorpy", "pyzipper", "llama-index-cli", "idna_ssl", "quantlib", "respx", "llama-index-embeddings-openai", "nibabel", "hubspot-api-client", "django-js-asset", "dohq-artifactory", "gcs-oauth2-boto-plugin", "pylev", "sasl", "uuid6", "policy_sentry", "exchangelib", "setuptools-git-versioning", "bazel-runfiles", "bc-detect-secrets", "notifiers", "itemadapter", "protego", "html-text", "opentelemetry-instrumentation-httpx", "pyvirtualdisplay", "tensorflow-io", "singleton-decorator", "opentelemetry-sdk-extension-aws", "rouge-score", "mypy-boto3-kms", "dockerpty", "llama-index-program-openai", "polyfactory", "betterproto", "pytest-dotenv", "aws-encryption-sdk", "llama-index-multi-modal-llms-openai", "xattr", "itemloaders", "apache-airflow-providers-jdbc", "requests-kerberos", "mypy-boto3-apigateway", "social-auth-app-django", "tabledata", "argparse-addons", "paste", "transaction", "youtube-transcript-api", "msoffcrypto-tool", "xhtml2pdf", "contextvars", "rfc3339", "pyhanko-certvalidator", "artifacts-keyring", "discord-py", "ptpython", "apache-airflow-providers-dbt-cloud", "auth0-python", "aiomultiprocess", "path", "mangum", "pytablewriter", "casefy", "flake8-polyfill", "jinja2-simple-tags", "selenium-wire", "ibm-cloud-sdk-core", "cmd2", "pdm-backend", "thop", "uncertainties", "google-analytics-data", "odfpy", "azureml-dataprep-native", "signxml", "zenpy", "svglib", "aws_secretsmanager_caching", "resampy", "jsonschema-spec", "llama-index-legacy", "glob2", "ansicolors", "mleap", "dagster-graphql", "pymongo-auth-aws", "soda-core-spark", "ccxt", "aioredis", "optimum", "pydicom", "curl-cffi", "llama-index-question-gen-openai", "apache-airflow-providers-mongo", "annoy", "spdx-tools", "prisma", "sanic", "flake8-builtins", "quart", "nbsphinx", "langfuse", "requests-unixsocket", "kaitaistruct", "bc-python-hcl2", "tensorflow-addons", "pytest-postgresql", "easydict", "transitions", "sphinx-basic-ng", "dash-bootstrap-components", "dbl-tempo", "textparser", "pinecone-plugin-interface", "advent-of-code", "troposphere", "asteval", "ibm_db", "pycairo", "sshpubkeys", "soda-core-spark-df", "josepy", "requests-auth-aws-sigv4", "pysbd", "aiostream", "types-stripe", "pytorch-metric-learning", "property-manager", "aws_lambda_builders", "pretty_html_table", "visions", "dbt-databricks", "azure-ai-formrecognizer", "seqio-nightly", "microsoft-security-utilities-secret-masker", "databricks-pypi2", "djangorestframework-stubs", "cloudsplaining", "openlineage-airflow", "impyla", "tyro", "html-testrunner", "checkdigit", "ndjson", "pinecone-plugin-inference", "jinja2-humanize-extension", "mypy-boto3-signer", "tensorflow-cpu", "chex", "pep8", "channels_redis", "rstr", "ctranslate2", "retry2", "circuitbreaker", "mypy-boto3-xray", "protoc-gen-openapiv2", "graphlib-backport", "pytube", "aim", "pytest-assume", "cliff", "roman", "ddt", "mypy-boto3-schemas", "aws-embedded-metrics", "cerberus-python-client", "mypy-boto3-ses", "pypyp", "accessible-pygments", "sudachidict-core", "arviz", "flake8-pyproject", "pytest-httpx", "sphinx-tabs", "restrictedpython", "apsw", "rembg", "speechrecognition", "pymilvus", "langgraph-sdk", "azureml-mlflow", "flatten-dict", "pycep-parser", "line_profiler", "ydb", "gnureadline", "supervision", "c7n-org", "linecache2", "strict-rfc3339", "recommonmark", "django-allauth", "crccheck", "colorclass", "sudachipy", "simple-gcp-object-downloader", "html-tag-names", "traceback2", "html-void-elements", "django-waffle", "dagster-webserver", "rpyc", "xmod", "mypy-boto3-sns", "mypy-boto3-emr-serverless", "icalendar", "latexcodec", "bc-jsonpath-ng", "bridgecrew", "pygtrie", "y-py", "msgraph-sdk", "pymatting", "swagger-spec-validator", "mercantile", "raven", "triad", "pytest-aiohttp", "jaxtyping", "oyaml", "sphinxcontrib-spelling", "urwid", "language-tags", "s3cmd", "aws-cdk-aws-lambda-python-alpha", "mando", "rope", "braceexpand", "editor", "livy", "sphinx-autobuild", "djlint", "btrees", "inquirerpy", "apache-airflow-providers-microsoft-azure", "types-aiobotocore-s3", "runs", "frida", "numpy-financial", "types-retry", "dagster-aws", "pfzy", "pyagrum-nightly", "typish", "jupyter_ydoc", "model_bakery", "webvtt-py", "hashids", "google-cloud-pipeline-components", "p4python", "pip-api", "akshare", "radon", "pyannote-database", "docformatter", "pybytebuffer", "mediapipe", "sly", "piexif", "jiwer", "kconfiglib", "fugue", "credstash", "swifter", "azure-storage", "breathe", "pulsar-client", "phik", "pybtex", "pyquaternion", "jupyter_server_ydoc", "array-record", "jupyter_server_fileid", "pyserial-asyncio", "dagster-postgres", "albucore", "aiogram", "celery-types", "lunardate", "bz2file", "hnswlib", "types-werkzeug", "pillow-heif", "wand", "aiocache", "pyahocorasick", "prance", "adagio", "galvani", "llama-cloud", "autopage", "langchain-anthropic", "decopatch", "rjsmin", "mypy-boto3-elbv2", "instructor", "dpkt", "giturlparse", "ypy-websocket", "pylas", "persistent", "panel", "sgqlc", "fasttext-langdetect", "zope-proxy", "oslo-utils", "types-pyasn1", "marshmallow-jsonschema", "yarn-api-client", "opencv-contrib-python-headless", "grapheme", "plac", "python-liquid", "apache-airflow-providers-odbc", "pyupgrade", "python3-logstash", "pypsrp", "openinference-semantic-conventions", "types-flask", "lunarcalendar", "watchgod", "yarg", "django-oauth-toolkit", "gymnasium", "types-colorama", "django-health-check", "nose2", "cachy", "types-defusedxml", "untokenize", "python-lsp-jsonrpc", "statsforecast", "google-cloud-artifact-registry", "nanoid", "gluonts", "azure-mgmt-resourcegraph", "flax", "types-openpyxl", "jinja2-time", "ebcdic", "falcon", "flake8-black", "awkward-cpp", "logzero", "django-prometheus", "pysaml2", "djangorestframework-api-key", "shyaml", "domdf-python-tools", "pyannote-core", "flatdict", "pyrate-limiter", "django-silk", "jsonmerge", "types-bleach", "scikit-optimize", "docx2txt", "safety-schemas", "google-cloud-discoveryengine", "git-remote-codecommit", "zope-deferredimport", "doit", "setuptools-git", "lupa", "mypy-boto3-batch", "pybase64", "clang", "elasticsearch7", "optax", "gym", "workalendar", "pyenchant", "decli", "segment-anything", "pytest-dependency", "snowflake", "flake8-print", "sktime", "log_symbols", "jaraco-text", "scikit-build", "sqllineage", "spinners", "pysam", "pyzbar", "pyscreeze", "keystoneauth1", "pyannote-metrics", "mypy-boto3-route53", "executor", "awslambdaric", "django-csp", "types-termcolor", "pytest-cases", "sanic-routing", "xdoctest", "python-ipware", "certbot-dns-cloudflare", "aiolimiter", "pytest-freezegun", "pyvis", "puremagic", "django-modeltranslation", "asgi-correlation-id", "python-string-utils", "pipreqs", "types-httplib2", "sphinxcontrib-httpdomain", "hdf5plugin", "accesscontrol", "treelib", "fluent-logger", "amqpstorm", "parsley", "awkward", "apache-airflow-providers-datadog", "apache-airflow-providers-celery", "progress", "oslo-config", "smmap2", "python-on-whales", "flake8-quotes", "python-memcached", "tempora", "autocommand", "stdlib-list", "textwrap3", "fastprogress", "unittest2", "pyvmomi", "schwifty", "tdqm", "flask-admin", "cssbeautifier", "param", "mypy-boto3-sagemaker-runtime", "pathlib-mate", "us", "numpydoc", "h5netcdf", "versioneer", "jaraco-collections", "plaid-python", "asteroid-filterbanks", "zigpy", "z3-solver", "swebench", "zodbpickle", "eradicate", "func_timeout", "poetry-plugin-pypi-mirror", "lancedb", "peppercorn", "ariadne", "sklearn2pmml", "mockito", "dotmap", "tableau-api-lib", "openinference-instrumentation", "fredapi", "sphinxcontrib-websupport", "textdistance", "oslo-i18n", "eralchemy2", "eyes-selenium", "snowflake-core", "subprocess32", "cibuildwheel", "facexlib", "types-appdirs", "primepy", "torch-audiomentations", "torch-pitch-shift", "eyes-common", "python-logging-loki", "httpretty", "ansiwrap", "devtools", "pyannote-audio", "pynput", "crc32c", "dateformat", "jsons", "google-reauth", "pytest-snapshot", "pytoolconfig", "shellescape", "pyannote-pipeline", "flake8-import-order", "flask-marshmallow", "flake8-eradicate", "django-object-actions", "dagster-k8s", "detect-secrets", "pyopengl", "rply", "fastapi-pagination", "libsass", "pykakasi", "supabase", "zconfig", "flask-talisman", "django-picklefield", "realtime", "macholib", "types-xmltodict", "acquisition", "pathtools", "django-anymail", "objprint", "zodb", "ndindex", "cheetah3", "vtk", "gevent-websocket", "supafunc", "cherrypy", "pusher", "types-tzlocal", "naked", "sparse", "colored", "rpaframework", "google-cloud-iam", "drf-nested-routers", "types-chardet", "gotrue", "faster-whisper", "arpeggio", "python-oxmsg", "biotite", "google-cloud-bigquery-biglake", "utilsforecast", "django-taggit", "pysmi", "pyjsparser", "mmcif", "types-oauthlib", "pysmb", "sphinx-prompt", "postgrest", "autogluon", "apache-airflow-providers-apache-spark", "update_checker", "oslo-serialization", "pip-audit", "modal", "aiomysql", "mypy-boto3-events", "storage3", "pymisp", "pre-commit-hooks", "attrdict", "sqlalchemy-stubs", "gssapi", "nats-py", "cloudscraper", "core-universal", "distribute", "mypy-boto3-lakeformation", "azureml-telemetry", "pysqlite3-binary", "yoyo-migrations", "debtcollector", "starlette-context", "wmi", "connectorx", "docker-image-py", "pytest-mypy", "localstack-core", "farama-notifications", "iterative-telemetry", "pyshp", "autogluon-core", "datacompy", "starlette-exporter", "argh", "asciitree", "delighted", "autogluon-tabular", "open3d", "stepfunctions", "a2wsgi", "pytest-lazy-fixture", "apache-airflow-providers-pagerduty", "pytweening", "dataclass-wizard", "fido2", "awscliv2", "cnvrgv2", "trl", "gender-guesser", "colorcet", "rcssmin", "django-mptt", "commitizen", "cmaes", "apache-airflow-providers-tableau", "ollama", "django-formtools", "backports-datetime-fromisoformat", "django-migration-linter", "mypy-boto3-dataexchange", "tk", "groq", "janus", "tf2onnx", "tox-uv", "google-api-python-client-stubs", "flask-mail", "dateutils", "torchdiffeq", "openinference-instrumentation-langchain", "sampleproject", "pydruid", "mozilla-django-oidc", "autofaker", "shrub-py", "xlutils", "pyapacheatlas", "databind-json", "openapi-schema-pydantic", "azure-schemaregistry", "geocoder", "opentelemetry-instrumentation-aws-lambda", "webdataset", "pygetwindow", "pyrect", "suds-community", "django-compressor", "pytest-azurepipelines", "databind-core", "portend", "autodocsumm", "beniget", "ast-grep-cli", "pluginbase", "types-dateparser", "halo", "mimesis", "pyspark-dist-explore", "retry_decorator", "spandrel", "tinydb", "polling2", "pyautogui", "pytest-flask", "darglint", "okta", "flask-testing", "snowflake-legacy", "singer-python", "opentelemetry-instrumentation-sqlite3", "sphinx-jinja", "easyprocess", "os-service-types", "openstacksdk", "mltable", "lief", "microsoft-kiota-serialization-form", "lmfit", "autogluon-features", "simple-parsing", "flaml", "regress", "isoweek", "async-property", "jinjasql", "google-cloud-recaptcha-enterprise", "pyviz_comms", "hmsclient", "enrich", "anybadge", "microsoft-kiota-serialization-multipart", "htmldocx", "pypugjs", "seleniumbase", "pytest-recording", "pymsgbox", "clipboard", "mouseinfo", "pip-licenses", "netsuitesdk", "apache-airflow-providers-salesforce", "zope-i18nmessageid", "dlt", "opentelemetry-instrumentation-celery", "apache-airflow-providers-airbyte", "ratelim", "htmldate", "apache-airflow-providers-oracle", "dotty-dict", "presidio-analyzer", "mypy-boto3-appconfig", "flask-oidc", "parver", "jsmin", "bson", "metaflow", "grpc-gateway-protoc-gen-openapiv2", "pyjarowinkler", "formic2", "win32_setctime", "gguf", "assisted-service-client", "jsonfield", "algoliasearch", "exchange-calendars", "dataproc-spark-connect", "opentelemetry-instrumentation-jinja2", "backports-shutil-get-terminal-size", "json-logging", "aiosmtplib", "apeye-core", "tfds-nightly", "backports-entry-points-selectable", "biotraj", "tmtools", "tbats", "clickhouse-sqlalchemy", "jstyleson", "fancycompleter", "tensorflow-gpu", "nptyping", "testtools", "awesomeversion", "clean-fid", "pyu2f", "flake8-tidy-imports", "xarray-einstats", "pyserde", "ratelimiter", "sphinxcontrib-bibtex", "flytekit", "tensorflow-model-optimization", "wurlitzer", "patool", "pyxdg", "pyiso8583", "envs", "avro-gen", "envyaml", "pyspellchecker", "nameparser", "zope-hookable", "feu", "onnxmltools", "wordfreq", "pdbpp", "dataclasses-avroschema", "mecab-python3", "simplegeneric", "pyod", "torch-model-archiver", "wmctrl", "fvcore", "imblearn", "snowplow-tracker", "sharepy", "suds-py3", "django-ses", "rpaframework-core", "cchardet", "crypto", "camel-converter", "flyteidl", "west", "sphinx-book-theme", "zope-component", "keyrings-alt", "scons", "pytest-parallel", "pythran-openblas", "holoviews", "java-manifest", "apeye", "backports-csv", "mlxtend", "looseversion", "locate", "expecttest", "dagster-dbt", "pybuildkite", "dvc", "mxnet", "ldaptor", "jinja2-cli", "pyside6-essentials", "submitit", "blessings", "polyline", "xmljson", "install-jdk", "zope-schema", "spython", "chameleon", "sphinxcontrib-confluencebuilder", "publish-event-sns", "quinn", "dagster-cloud", "pythonnet", "tf-estimator-nightly", "gnupg", "ocspbuilder", "google-cloud-os-config", "azure-storage-nspkg", "collections-extended", "restructuredtext_lint", "python-redis-lock", "ocspresponder", "langchain-google-genai", "phonemizer", "tensorflow-transform", "hdbscan", "aiomqtt", "frictionless", "javaobj-py3", "tempita", "bibtexparser", "plum-dispatch", "elasticsearch8", "psygnal", "openshift", "pywatchman", "gpustat", "catboost-dev", "braintree", "jupyter-cache", "hl7apy", "minidump", "proxy-protocol", "pyqt6-qt6", "backports-ssl-match-hostname", "symengine", "pykmip", "publicsuffixlist", "molecule", "zope-tal", "zope-security", "curatorbin", "pytest-qt", "evergreen-lint", "qudida", "cantools", "opentelemetry-propagator-b3", "dvclive", "codetiming", "palettable", "textstat", "rpaframework-pdf", "azureml-dataset-runtime", "cdktf", "python-miio", "duckduckgo-search", "crayons", "pysnmp", "cursor", "structlog-sentry", "honeybee-energy", "flake8-debugger", "azure-ai-documentintelligence", "antlr4-tools", "acryl-datahub-airflow-plugin", "fastapi_utils", "restfly", "jamo", "tqdm-multiprocess", "python-gettext", "zthreading", "google-cloud-error-reporting", "pylatexenc", "clikit", "icecream", "mypy-boto3-logs", "pytest-celery", "validate_email", "tfx-bsl", "zipfile36", "pybtex-docutils", "requests-oauth", "textfsm", "apache-airflow-providers-redis", "pyrdfa3", "python-keystoneclient", "django_polymorphic", "dbfread", "argilla", "pystan", "robocorp-storage", "sparqlwrapper", "libhoney", "django-admin-rangefilter", "extruct", "fastai", "httmock", "robotframework-seleniumtestability", "setuptools_scm_git_archive", "simpleitk", "easyocr", "pyyaml-include", "django-types", "msgpack-numpy", "logz", "rank-bm25", "google-cloud-org-policy", "opentelemetry-instrumentation-system-metrics", "tbb", "sphinx-sitemap", "appier", "arnparse", "persistence", "xtgeo", "vllm", "django-widget-tweaks", "embedchain", "ipyparallel", "ibm-platform-services", "assertpy", "astral", "youtube-dl", "jsonpath-rw-ext", "scikit-base", "honeybee-core", "flake8-bandit", "slowapi", "django-axes", "case-conversion", "autogluon-common", "acryl-sqlglot", "importlib", "csvw", "statsig", "sphinx-toolbox", "interegular", "psycogreen", "requestsexceptions", "extensionclass", "roundrobin", "datadog-lambda", "flasgger", "mypy-boto3", "ajsonrpc", "docopt-ng", "clldutils", "splunk-sdk", "pyre-extensions", "typing_utils", "localstack-ext", "traittypes", "apache-airflow-providers-atlassian-jira", "zope-exceptions", "mf2py", "zope-container", "aplr", "json-stream-rs-tokenizer", "feast", "spanishconjugator", "python-frontmatter", "openvino", "django-ratelimit", "cdk-aurora-globaldatabase", "sqlalchemy-mate", "sgp4", "java-access-bridge-wrapper", "lkml", "pytest-docker", "viztracer", "grandalf", "zope-configuration", "pyqt6", "pyfaidx", "datadog-logger", "jenkinsapi", "logzio-python-handler", "pygobject", "pyrtf3", "livereload", "djangoql", "azure-containerregistry", "zope-testing", "zope-i18n", "robocorp-vault", "zope-publisher", "parsy", "blake3", "pillow-avif-plugin", "pyroute2", "zope-location", "pynput-robocorp-fork", "tableschema", "config", "confuse", "python-geohash", "zope-contenttype", "zope-browser", "tangled-up-in-unicode", "airbyte-cdk", "pantab", "slacker", "zope-lifecycleevent", "mkdocs-macros-plugin", "databases", "geckodriver-autoinstaller", "cmarkgfm", "dvc-data", "databricks-feature-store", "myst-nb", "readerwriterlock", "django-ckeditor", "dict2xml", "clr_loader", "webhelpers2", "kedro", "maybe-else", "freetype-py", "infi-systray", "prettierfier", "gtts", "outlines", "rarfile", "html5tagger", "mypy-boto3-cloudwatch", "pycognito", "trafilatura", "publicsuffix2", "marko", "glfw", "pytest-github-actions-annotate-failures", "pysubtypes", "opentelemetry-exporter-prometheus-remote-write", "tdigest", "pymiscutils", "ip3country", "pathmagic", "pyside6", "json2html", "pyiotools", "mdx_truly_sane_lists", "shiboken6", "pulumi-aws", "sphinx-airflow-theme", "ably", "tracerite", "zope-cachedescriptors", "zope-traversing", "pynvim", "mypy-boto3-eks", "office365", "extract-msg", "libretranslatepy", "zope-dottedname", "cvxopt", "jplephem", "deep-translator", "sqlalchemy-migrate", "requests_pkcs12", "pyston", "cbor", "wsgiproxy2", "segments", "pyston-autoload", "pip-system-certs", "zope", "isal", "scim2-filter-parser", "zope-size", "opentelemetry-instrumentation-asyncpg", "zope-annotation", "zope-filerepresentation", "honeycomb-beeline", "lime", "httpie", "zope-site", "mapbox_earcut", "pyrepl", "authencoding", "localstack", "contentful", "mkdocs-git-revision-date-localized-plugin", "psqlpy", "zope-processlifetime", "zexceptions", "hstspreload", "coreforecast", "google-cloud-dns", "justext", "gcloud", "ladybug-core", "translate", "zope-datetime", "flufl-lock", "documenttemplate", "awacs", "protoc-wheel-0", "z3c-pt", "lm-format-enforcer", "munkres", "pytelegrambotapi", "pytest-profiling", "fastrlock", "uplink", "zope-tales", "asynch", "zope-pagetemplate", "google-cloud-access-context-manager", "python-semantic-release", "zope-structuredtext", "pyqt6-sip", "formencode", "zope-contentprovider", "zope-sequencesort", "ladybug-geometry", "pytest-clarity", "zope-browserpage", "zope-testbrowser", "zope-browserresource", "pyjks", "zope-viewlet", "turbopuffer", "evidently", "testing-common-database", "pydantic-xml", "multimapping", "business-rules", "zope-ptresource", "asyncache", "escapism", "zope-browsermenu", "uszipcode", "imgaug", "gmpy2", "google-cloud-asset", "dlinfo", "django-reversion", "red-discordbot", "zope-globalrequest", "webrtcvad-wheels", "pebble", "simsimd", "policyuniverse", "clvm-tools-rs", "pyomo", "aws-cdk-aws-glue-alpha", "flask-basicauth", "pytest-watch", "wasmer", "msgpack-python", "pytest-ansible", "julius", "pytest-factoryboy", "pyside6-addons", "stomp-py", "jupyter-packaging", "dotenv", "requirements-detector", "cinemagoer", "leb128", "bioutils", "pylibdmtx", "mongo-tooling-metrics", "azure-mgmt-costmanagement", "spark-sklearn", "pypinyin", "cvdupdate", "django-scim2", "junit2html", "imdbpy", "splunk_handler", "types-boto", "tensorflowonspark", "apache-airflow-providers-apache-kafka", "deptry", "nulltype", "lxml-stubs", "ytsaurus-client", "dvc-render", "lucopy", "vertexai", "lameenc", "fcm-django", "python-intervals", "delta", "cuda-python", "sphinxcontrib-katex", "elasticsearch-dbapi", "sphinx-gallery", "mysql", "easypost", "mongo-ninja-python", "aiopg", "honeybee-schema", "imath", "window-ops", "ibmcloudant", "ytsaurus-yson", "idf-component-manager", "pyminizip", "dagster-cloud-cli", "types-requests-oauthlib", "django-structlog", "seqeval", "django-webpack-loader", "django_coverage_plugin", "hf-transfer", "casadi", "pygerduty", "lml", "python-fsutil", "sphinx-jinja2-compat", "ladybug-geometry-polyskel", "flake8-broken-line", "dict2css", "anyconfig", "markuppy", "python-openstackclient", "python-whois", "snakeviz", "cppy", "dvc-objects", "smartystreets_python_sdk", "skyfield", "scmrepo", "newspaper3k", "mypy-boto3-cognito-idp", "azure-cognitiveservices-speech", "mlserver", "reportportal-client", "pyexcel-io", "types-reportlab", "pyvisa", "plux", "mock-alchemy", "testing-postgresql", "clickhouse-cityhash", "json_stream", "quicktions", "cdk8s", "sqlitedict", "clvm-rs", "pytest-deadfixtures", "dbt-athena-community", "dagster-slack", "functools32", "random-password-generator", "autogluon-timeseries", "resize-right", "emmet-core", "sodapy", "newrelic-telemetry-sdk", "pytest-vcr", "scrapbook", "dbt-duckdb", "biocommons-seqrepo", "ntplib", "wasmer-compiler-cranelift", "openapi-core", "pyawscron", "pyairports", "autogluon-multimodal", "pytest-retry", "rangehttpserver", "typeid-python", "pythonping", "django-ninja", "tcod", "schemdraw", "netmiko", "openvino-telemetry", "flask-smorest", "acme", "mypy-boto3-sso", "hidapi", "honeybee-standards", "pydantic-openapi-helper", "importlab", "nvidia-ml-py3", "pytype", "localstack-client", "easygui", "apache-airflow-providers-github", "ibm-cos-sdk-core", "hgvs", "coola", "find-libpython", "spglib", "ibm-cos-sdk-s3transfer", "lpips", "pytest-nunit", "rpy2", "opentelemetry-instrumentation-pymongo", "deepspeed", "tinysegmenter", "homeassistant", "always-updates", "xmldiff", "suds", "lob", "flake8-plugin-utils", "ladybug-display", "apache-airflow-providers-openlineage", "copier", "prawcore", "descartes", "check-jsonschema", "aws-cdk-cx-api", "gdbmongo", "opentelemetry-exporter-jaeger-thrift", "ibm-cos-sdk", "ibm_db_sa", "milvus-lite", "django-treebeard", "ping3", "pyliftover", "apipkg", "utm", "crewai", "pymannkendall", "fastcluster", "aws-sns-message-validator", "monkeytype", "agefromname", "pytest-flake8", "bezier", "pylint-celery", "lm_eval", "types-aiobotocore-sqs", "django-fsm-2", "luqum", "apache-airflow-providers-apache-hive", "graphene-django", "cli_helpers", "deepl", "couchbase", "flask-script", "canvas-workflow-kit", "aiorwlock", "ntc-templates", "discord", "pyorc", "ladybug-rhino", "gin-config", "django-mysql", "xmodem", "tox-gh-actions", "sqlalchemy-hana", "flametree", "sparkmeasure", "graypy", "databind", "scikit-plot", "pyobjc-core", "zipfile-deflate64", "pybase62", "dvc-studio-client", "types-qrcode", "econml", "mplfinance", "unstructured-inference", "capstone", "bugsnag", "email-reply-parser", "sigtools", "paradime-io", "kcli", "torchbiggraph", "shandy-sqlfmt", "kubernetes-stubs", "teamhack-nmap", "google-cloud-documentai", "xatlas", "sphinxcontrib-plantuml", "docstring-to-markdown", "docxtpl", "honcho", "dodgy", "types-sqlalchemy", "torchdata", "dvc-task", "pdfrw", "scooby", "teamcity-messages", "xmlrunner", "deb-pkg-tools", "optbinning", "langchain-cohere", "tentaclio", "python-barcode", "azure-monitor-ingestion", "types-futures", "secure", "patch", "krb5", "brotlicffi", "pydrive2", "sphinx-reredirects", "roboflow", "manifold3d", "mistletoe", "pyngrok", "courlan", "pyglet", "agilicus", "dagit", "sumy", "tentaclio-s3", "nbqa", "openvisus", "osc-lib", "pytest-alembic", "opentelemetry-instrumentation-pika", "pymeta3", "vhacdx", "langchain-chroma", "mistralai", "awsiotsdk", "python-codon-tables", "azureml-pipeline-core", "tach", "gputil", "ph-units", "asyncstdlib", "dnachisel", "bleak", "praw", "python-igraph", "tree-sitter-python", "guppy3", "dvc-http", "jinja2_pluralize", "bsdiff4", "astpretty", "fusepy", "word2number", "pvlib", "simpy", "backports_abc", "cg", "mcap", "django-localflavor", "crispy-bootstrap5", "aliyun-python-sdk-vpc", "googleads", "tabula-py", "types-ipaddress", "google-search-results", "libusb1", "selinux", "ibis-framework", "nox-poetry", "catkin_pkg", "aws-cdk-region-info", "ansible-base", "taskgroup", "shellcheck-py", "robotframework-stacktrace", "svg-path", "fastdiff", "extras", "geomdl", "xsdata", "cdk-certbot-dns-route53", "segyio", "py-moneyed", "allure-behave", "wincertstore", "mistral-common", "inflector", "flake8-variables-names", "opentelemetry-instrumentation-boto3sqs", "blendmodes", "chalice", "cmakelang", "python-calamine", "river", "files-com", "python-cinderclient", "flake8-simplify", "arch", "aws-cdk-asset-node-proxy-agent-v5", "mkdocs-redirects", "opentelemetry-test-utils", "ruamel-yaml-jinja2", "ailever", "azureml-inference-server-http", "celery-redbeat", "easing-functions", "intuit-oauth", "google-python-cloud-debugger", "prospector", "primp", "paramiko-expect", "keras-nightly", "aiodataloader", "flake8-commas", "types-aioboto3", "neptune-client", "aiohttp-sse-client", "azureml-train-core", "python-gflags", "pytools", "fastly", "pymatgen", "repoze-who", "lasio", "googletrans", "tencentcloud-sdk-python", "onnxsim", "aioquic", "mypy-boto3-firehose", "uuid-utils", "pandas-market-calendars", "names", "azureml-featurestore", "scikeras", "yellowbrick", "presidio-anonymizer", "verspec", "stable-baselines3", "alibabacloud-tea", "bayesian-optimization", "img2pdf", "tomesd", "dag-factory", "azureml-automl-core", "flask-oauthlib", "perlin-noise", "django-two-factor-auth", "types-backports", "entsoe-py", "future_fstrings", "mkdocs-gen-files", "ipympl", "pytest-pythonpath", "sqltrie", "python-socks", "ruyaml", "wmill", "apache-airflow-providers-opsgenie", "types-aiobotocore-dynamodb", "snapshottest", "jupyter_highlight_selected_word", "telethon", "blackduck", "versioneer-518", "google-cloud-scheduler", "modelscope", "duckdb-engine", "pydantic-yaml", "quart-cors", "openpyxl-stubs", "segno", "app-store-scraper", "cached_path", "types-toposort", "layoutparser", "llama-index-embeddings-azure-openai", "morecantile", "lazy-imports", "aws-cdk-core", "keyboard", "pyglove", "nvidia-cuda-nvcc-cu12", "tsdownsample", "ase", "psycopg-c", "bellows", "opentelemetry-instrumentation-starlette", "opentelemetry-exporter-jaeger-proto-grpc", "flash-attn", "openapi3", "mwparserfromhell", "jupyter_nbextensions_configurator", "mike", "mkdocs-monorepo-plugin", "transforms3d", "kaldiio", "sphinx-click", "robotframework-pabot", "flask-swagger-ui", "synchronicity", "sqlalchemy-json", "apache-airflow-microsoft-fabric-plugin", "pip-check", "brotlipy", "argparse-dataclass", "rdrobust", "abqpy", "camelot-py", "imutils", "ragas", "aliyun-python-sdk-r-kvstore", "bzt", "meshio", "import-deps", "zha-quirks", "appengine-python-standard", "mdformat", "tensordict-nightly", "sttable", "lsprotocol", "whoosh", "simplefix", "plantuml-markdown", "pyxirr", "fairlearn", "langid", "pyvista", "ast-grep-py", "zigpy-znp", "fastdownload", "xopen", "zigpy-deconz", "jupyterhub", "nmslib", "clickhouse-toolset", "bigdl-nano", "uuid7", "pandarallel", "effdet", "flask-apscheduler", "cron-converter", "cement", "zigpy-xbee", "prefixed", "mypy-boto3-bedrock-runtime", "sk-dist", "mypy-boto3-route53domains", "databricks-pypi-extras", "libusb-package", "python-lsp-server", "pyro-ppl", "ldapdomaindump", "glances", "pyjnius", "dm-env", "bencode2", "pismosendlogs", "platformio", "asn1", "pi-heif", "pytest-testinfra", "plotly-resampler", "line-bot-sdk", "asammdf", "azureml-train-restclients-hyperdrive", "openai-whisper", "coincurve", "ptvsd", "handpick", "mypy-boto3-dms", "pypdftk", "securesystemslib", "tdda", "rush", "yamlordereddictloader", "pybars3", "pyaudio", "graphitesend", "types-aiobotocore-lambda", "intervals", "python-json-config", "darkdetect", "xlwings", "result", "azure-eventhub-checkpointstoreblob-aio", "monty", "pytest-reportportal", "pygls", "ansible-runner", "flask-shell-ipython", "django-colorfield", "simplejpeg", "target-hotglue", "schedulefree", "flit", "types-aiobotocore-dataexchange", "cxxfilt", "heapdict", "mobly", "azure-schemaregistry-avroserializer", "torch-geometric", "chromedriver-autoinstaller", "fixtures", "opentelemetry-exporter-jaeger", "langchainhub", "mypy-boto3-config", "webassets", "sigstore", "colorzero", "cdk-events-notify", "oauth2", "thriftpy2", "logging-formatter-anticrlf", "python-certifi-win32", "tink", "id", "pinecone", "llama-index-llms-azure-openai", "gpiozero", "sphinx-data-viewer", "pytest-memray", "pem", "tuf", "kedro-telemetry", "dtlpymetrics", "requests-ntlm3", "swig", "comet-ml", "kafka-python-ng", "pyvim", "tslearn", "asyncmy", "django-nested-admin", "lazy", "python-logstash", "pgeocode", "pytest-flakefinder", "python-amazon-sp-api", "django-user-agents", "flupy", "sphinx-needs", "cloudwatch", "array-api-compat", "pymodbus", "mujoco", "apache-airflow-providers-elasticsearch", "great-expectations-experimental", "gspread-formatting", "petl", "wikipedia", "itables", "django-constance", "types-python-jose", "bapy", "pattern", "kedro-datasets", "jinja2-ansible-filters", "gitlint", "aws-cdk-aws-iam", "check-manifest", "robotframework-jsonlibrary", "pylibmc", "gitlint-core", "modern-treasury", "progressbar", "azureml-train-automl-client", "pygraphviz", "alacorder", "drf-spectacular-sidecar", "awscli-local", "mailchimp-marketing", "django-auth-ldap", "opencensus-proto", "django-money", "missingpy", "coverage-badge", "mcap-protobuf-support", "mwclient", "pyobjc-framework-cocoa", "ncclient", "google-play-scraper", "mkdocs-techdocs-core", "rdt", "ropwr", "dirty-equals", "qiskit", "aerospike", "django-auditlog", "django-fsm", "beaker", "django-json-widget", "pylint-flask", "cartopy", "uproot", "opentelemetry-instrumentation-asyncio", "aiosmtpd", "python-swiftclient", "fhir-resources", "partial-json-parser", "pyro-api", "apispec-webframeworks", "httpx-ws", "opencensus-ext-requests", "aresponses", "anycrc", "django-guardian", "grpcio-testing", "yapsy", "pylint-pydantic", "tika", "types-flask-cors", "pytest-datadir", "labmaze", "jsonpath", "anyscale", "djangorestframework-csv", "emojis", "ada-url", "django-tables2", "m2crypto", "accumulation-tree", "python-benedict", "google-api", "evdev", "docstring_parser_fork", "odxtools", "mypy-boto3-efs", "mkdocs-awesome-pages-plugin", "chia-rs", "opentelemetry-instrumentation-tortoiseorm", "pylama", "sigstore-protobuf-specs", "opentelemetry-propagator-gcp", "spotinst-agent", "pybufrkit", "drf-extensions", "abstra", "customtkinter", "alembic-postgresql-enum", "fs-s3fs", "quadprog", "aws-assume-role-lib", "fairscale", "warcio", "types-aiobotocore-ec2", "sphinxcontrib-drawio", "pyexcel", "django-rest-swagger", "chiapos", "s2sphere", "databricks-feature-engineering", "sspilib", "oletools", "sphinx-notfound-page", "kneed", "pythran", "dbt-fabric", "pyvalid", "ml-collections", "sigstore-rekor-types", "flake8-rst-docstrings", "rstcheck", "bravado", "aioesphomeapi", "pyside2", "aws-cdk-aws-ec2", "oslo-context", "python-monkey-business", "spandrel-extra-arches", "intel-openmp", "typeshed-client", "matrix_client", "cma", "easyconfig", "prettyprinter", "pyqtwebengine", "aws-kinesis-agg", "flask-swagger", "a-bigelow-cdk-eventbridge-partner-processors", "pytest-variables", "pcodedmp", "azureml-pipeline-steps", "unstructured-pytesseract", "prometheus-api-client", "controlnet-aux", "torch-complex", "aws-cdk-aws-kms", "xlsx2csv", "mkdocs-include-markdown-plugin", "r2pipe", "flake8-string-format", "backports-strenum", "pyfume", "nvidia-nvcomp-cu12", "gto", "gfpgan", "model-index", "stempeg", "pytest-unordered", "histomicstk", "musdb", "mmhash3", "groundingdino-py", "selectolax", "wtforms-components", "inotify", "beautifulsoup", "aws-cdk-aws-lambda", "types-aiobotocore-rds", "pedalboard", "numpy-quaternion", "lizard", "pip-with-requires-python", "bitvector", "faiss-gpu", "museval", "oslo-log", "pudb", "waiting", "pytest-pylint", "littlefs-python", "pyudorandom", "pandas-datareader", "robotframework-browser", "pybloom_live", "mwtextextractor", "delayed-assert", "azureml-pipeline", "uhashring", "azureml-defaults", "setoptconf-tmp", "opencc-python-reimplemented", "pytest-docker-tools", "opencc", "lalsuite", "pyfunceble-dev", "langchain-groq", "pydeprecate", "attr", "pysimdjson", "types-regex", "rake_nltk", "alembic-utils", "healpy", "mypy-boto3-autoscaling", "shiboken2", "forex-python", "mpld3", "mailjet-rest", "opentelemetry-instrumentation-threading", "timg", "sorl-thumbnail", "pandas_schema", "currencyconverter", "dbx", "python-novaclient", "mnemonic", "djangorestframework-dataclasses", "docrepr", "wtforms-alchemy", "django-configurations", "xml-python", "gpxpy", "crowdstrike-falconpy", "chiavdf", "python-interface", "arthurai", "compressed-rtf", "aws-cdk-aws-s3", "kivy", "yattag", "opacus", "coremltools", "hurry-filesize", "djangorestframework-camel-case", "unitypy", "delocate", "pyftpdlib", "suds-jurko", "bitmath", "django-multiselectfield", "crontab", "aws-cdk-aws-sqs", "haystack-ai", "decord", "schematics", "robotframework-robocop", "pyproject-flake8", "yara-python", "brickflows", "trafaret", "pyinotify", "doc8", "pandas-profiling", "pockets", "fernet", "docspec-python", "nr-stream", "pylink-square", "lomond", "awsebcli", "types-aiobotocore-cloudformation", "litestar", "autodoc-pydantic", "baron", "plotly_express", "dm-control", "tree-sitter-javascript", "shopifyapi", "dj-rest-auth", "oci-cli", "zake", "infinity", "pyfarmhash", "openexr", "rfc8785", "openmim", "cupy-cuda12x", "tree_sitter_languages", "cdk-gitlab-runner", "kafka", "aimmo", "aws-cdk-aws-secretsmanager", "webexteamssdk", "mypy-boto3-cognito-identity", "bravado-core", "pdoc", "docusign-esign", "nr-util", "jupyter_contrib_core", "banal", "feedfinder2", "aiortc", "pydoc-markdown", "langchain-huggingface", "docspec", "hass-client", "routes", "pyreadline", "mkdocs-glightbox", "sqlite-utils", "types-boto3", "jc", "fastapi-slim", "jieba3k", "pyspark-pandas", "reprint", "flake8-annotations", "redbaron", "rauth", "sphinxcontrib-napoleon", "apache-airflow-providers-apache-druid", "cachebox", "poyo", "segtok", "linode-cli", "fslpy", "path-py", "kerberos", "aws-cdk-aws-ssm", "mypy-boto3-textract", "pydomo", "apache-airflow-providers-papermill", "getmac", "loky", "mlforecast", "ordereddict", "pyshark", "aws-cdk-aws-events", "coolprop", "aws-lambda-typing", "azureml-sdk", "get-reader", "types-fpdf2", "vobject", "aws-cdk-aws-s3-assets", "cdk-common", "miscreant", "python-graphql-client", "ansible-pylibssh", "kaldi_io", "eascheduler", "pytest-subprocess", "splink", "aws-msk-iam-sasl-signer-python", "testresources", "asyncer", "higher", "dall-e", "serpent", "django-jazzmin", "lingua-language-detector", "empy", "aws-cdk-aws-sns", "djangorestframework-xml", "pytest-trio", "mkdocs-literate-nav", "unicorn", "djangorestframework-jwt", "typeapi", "lightfm", "clearml", "awslimitchecker", "pypi-attestations", "hbutils", "robocorp-log", "pylsl", "android-backup", "aws-logging-handlers", "tensorflowjs", "py-grpc-prometheus", "pyfunctional", "pyang", "paddlepaddle", "django-elasticsearch-dsl", "multiaddr", "haystack-experimental", "ipcqueue", "django-cleanup", "badx12", "nr-date", "python3-xlib", "django-impersonate", "teradataml", "grequests", "codeguru_profiler_agent", "aws-cdk-aws-ecr", "opentelemetry-instrumentation-openai", "aws-cdk-aws-cloudwatch", "sqlalchemy-trino", "opendatalab", "airflow-exporter", "opentelemetry-instrumentation-kafka-python", "pypd", "linode-metadata", "blackfire", "azure-communication-email", "tatsu", "toml-sort", "embreex", "fuzzyset2", "beanie", "apache-airflow-providers-trino", "robotframework-assertion-engine", "opentelemetry-semantic-conventions-ai", "crochet", "fuzzytm", "pydevd-pycharm", "treelite", "mpi4py", "pyloudnorm", "dagster-docker", "prefect-github", "aliyun-python-sdk-ecs", "azure-mgmt-hybridcompute", "sql-formatter", "alexapy", "qpd", "pygam", "simpful", "python-pptx-templater", "python-debian", "apache-airflow-providers-vertica", "django-tinymce", "apache-airflow-providers-sendgrid", "drf-jwt", "edx-enterprise", "utils", "asyncclick", "event-model", "fugashi", "envparse", "oras", "python-osc", "prefect-sqlalchemy", "adjusttext", "flask-assets", "amplitude-analytics", "dagster-pyspark", "opentelemetry-instrumentation-elasticsearch", "dockerfile", "opentelemetry-instrumentation-boto", "databricks-utils", "nagisa", "ibm-watsonx-ai", "zdaemon", "konlpy", "deepeval", "twofish", "snowflake-ingest", "mypy-boto3-kafka", "versionfinder", "f90nml", "torchinfo", "google-cloud-functions", "json-schema-for-humans", "sqlalchemy-continuum", "lintrunner", "mypy-boto3-iot", "aws-cdk-aws-logs", "pyarmor", "ubelt", "pyathenajdbc", "pyocd", "jupyter_contrib_nbextensions", "aws-cdk-aws-sam", "whylogs", "pyactiveresource", "luigi", "tox-ansible", "dissect-target", "mapclassify", "aws-cdk-aws-ecr-assets", "docxcompose", "blacken-docs", "enlighten", "tzwhere", "basicsr", "gurobipy", "aws-cdk-aws-applicationautoscaling", "pyvisa-py", "supermercado", "tensorflow-io-nightly", "dimod", "depthai", "robyn", "chargebee", "extra-streamlit-components", "gspread-pandas", "visitor", "fiscalyear", "objectory", "inference-schema", "cloudinary", "allennlp-pvt-nightly", "mypy-boto3-ce", "joblibspark", "tailer", "pycaret", "multi-model-server", "pyld", "rio-cogeo", "generalimport", "abstract-ai", "nutter", "django-hijack", "pystac", "aws-cdk-aws-efs", "mypy-boto3-codepipeline", "molecule-plugins", "pbspark", "pytest-selenium", "imap-tools", "argo-workflows", "django-rq", "pyqtgraph", "draftjs_exporter", "streamlit-aggrid", "python-mimeparse", "styleframe", "magic-filter", "qiskit-aer", "in_place", "funasr", "jsonslicer", "super-collections", "rouge", "ttp", "apify-client", "h2o", "nanobind", "pytest-testmon", "pytest-reportlog", "rtfde", "assemblyline-core", "pyinstaller-versionfile", "cognitojwt", "mmengine", "django-autocomplete-light", "stamina", "mypy-boto3-cloudtrail", "django-select2", "nbstripout", "pytest-timestamper", "icontract", "robocorp-tasks", "pulumi-command", "serial", "canmatrix", "drf-writable-nested", "prov", "geojson-pydantic", "cfile", "apache-airflow-providers-jenkins", "dicomweb-client", "pact-python", "cpplint", "statistics", "transliterate", "pycobertura", "great_tables", "openapi-codec", "entrypoint2", "onepasswordconnectsdk", "recordclass", "opentelemetry-instrumentation-pymysql", "pyhs2", "pylsqpack", "reedsolo", "sagemaker-data-insights", "polarsgeoutils", "mypy-boto3-dynamodbstreams", "aws-cdk-aws-stepfunctions", "types-maxminddb", "mypy-boto3-application-autoscaling", "logging", "pydrive", "aws-cdk-custom-resources", "tgcrypto", "numdifftools", "mkl", "pyscaffold", "mypy-boto3-elasticache", "langserve", "murmurhash2", "dagster-gcp", "mypy-boto3-cloudfront", "robocorp", "finbourne-access-sdk", "robocorp-workitems", "nlpaug", "proselint", "screeninfo", "flask-apispec", "django-admin-sortable2", "mypy-boto3-iot-data", "aws-cdk-aws-sns-subscriptions", "tfa-nightly", "bio-grumpy", "tensorflow-recommenders", "pytorch-wpe", "pennylane-lightning", "canopen", "lazy-model", "trufflehog", "aiohttp-socks", "gcloud-aio-pubsub", "django-braces", "robotframework-tidy", "simple-ddl-parser", "mkdocs-section-index", "aws-cdk-aws-codeguruprofiler", "pycarlo", "pylogbeat", "pyroscope-io", "pystoi", "actfast", "mypy-boto3-sesv2", "mypy-boto3-organizations", "streamlit-keyup", "assemblyline-service-server", "yamlfix", "django-templated-mail", "mypy-boto3-connect", "docker-py", "flake8-pep3101", "yandex-query-client", "anywidget", "pymap3d", "pylightxl", "ipfshttpclient", "assemblyline", "b2sdk", "rospkg", "aws-cdk-aws-certificatemanager", "ezdxf", "urlextract", "scrypt", "wagtail", "django-allow-cidr", "sqlalchemy-cockroachdb", "pydoe", "pyliquibase", "google-cloud-ndb", "rosbags", "pynetbox", "aiotieba", "google-cloud-profiler", "django-htmx", "httpie-edgegrid", "amplpy", "junos-eznc", "gdal", "easy-thumbnails", "deap", "aws-cdk-aws-signer", "langchain-pinecone", "pylibsrtp", "uptime-kuma-api", "pythainlp", "anymarkup", "aws-cdk-aws-route53", "anymarkup-core", "cli-exit-tools", "pulumi-tls", "xinspect", "ghostscript", "gpytorch", "equinox", "tensorflow-decision-forests", "apysc", "simple-term-menu", "mypy-boto3-wafv2", "pyexcel-xlsx", "robotframework-retryfailed", "rtoml", "tabcmd", "titlecase", "django-test-migrations", "assemblyline-ui", "jsonnet", "bigdl-chronos", "pycnite", "flexmock", "prefect-shell", "autoray", "arxiv", "aws-cdk-aws-autoscaling-common", "pygdbmi", "lib-detect-testenv", "property-cached", "mypy-boto3-pinpoint-sms-voice-v2", "python-tds", "timeflux", "maison", "stackprinter", "wasmtime", "virtualenvwrapper", "casbin", "onnxscript", "fcache", "fastexcel", "python-schema-registry-client", "scriptconfig", "typer-cli", "aws-cdk-assets", "aioice", "pglast", "logfury", "lightstep", "webapp2", "mypy-boto3-acm", "mitmproxy", "bootstrap-flask", "yalafi", "vadersentiment", "pyqtwebengine-qt5", "django-log-request-id", "bce-python-sdk", "gherkin-official", "streamlit-extras", "ipy", "chess", "mypy-boto3-es", "chiabip158", "awscurl", "pygal", "pysolr", "wiki-fetch", "flake8-logging-format", "mypy-boto3-quicksight", "rlbot", "delta-sharing", "progiter", "rioxarray", "varint", "mypy-boto3-resourcegroupstaggingapi", "aws-cdk-aws-cloudformation", "tensorboard-plugin-profile", "elevenlabs", "drissionpage", "tavern", "pyjwkest", "anndata", "python-binance", "link", "launchable", "interpret-core", "cmsis-pack-manager", "nicegui", "ert", "chalkpy", "solders", "git-python", "opentelemetry-instrumentation-mysql", "spacy-transformers", "dotnetcore2", "jsonformatter", "pyqrcode", "pentapy", "types-passlib", "dagster-shell", "dynet", "esptool", "kmodes", "lusid-sdk", "pysqlite3", "boto-session-manager", "flexget", "sphinx-togglebutton", "azureml-fsspec", "mypy-boto3-transcribe", "pyrogram", "zxcvbn", "paddleocr", "aws-cdk-aws-apigateway", "mypy-boto3-servicediscovery", "opensearch-dsl", "json-encoder", "ipyvuetify", "mypy-boto3-comprehend", "springserve", "setuptools-odoo", "model-archiver", "pylru", "fastapi-mail", "sqlalchemy-drill", "slotted", "pygeos", "mypy-boto3-servicecatalog", "mypy-boto3-ec2-instance-connect", "pytest-freezer", "marshmallow3-annotations", "dask-cuda", "mypy-boto3-securityhub", "esp-idf-kconfig", "yeelight", "tflite-model-maker-nightly", "disposable-email-domains", "uri", "nncf", "gviz-api", "py-backwards-astunparse", "pytest-parametrization", "marshmallow-jsonapi", "robotframework-excellib", "aws-cdk-aws-servicediscovery", "py-backwards", "nbmake", "kopf", "moderngl", "ormsgpack", "mypy-boto3-apigatewaymanagementapi", "s3pathlib", "multiprocessing-logging", "mypy-boto3-dax", "autogluon-vision", "mypy-boto3-guardduty", "mypy-boto3-elb", "autogluon-text", "bearlibterminal", "returns", "jax-jumpy", "rqdatac", "mypy-boto3-apigatewayv2", "pyct", "clint", "mypy-boto3-service-quotas", "mypy-boto3-identitystore", "elasticsearch6", "jax-cuda12-plugin", "ipaddr", "rotary-embedding-torch", "torchlayers-nightly", "aws-cdk-aws-codestarnotifications", "setuptools-download", "aliyun-python-sdk-rds", "music21", "mypy-boto3-support", "iterproxy", "uvicorn-worker", "circus", "amundsen-databuilder", "willow", "geohash2", "ipyvue", "mypy-boto3-ebs", "pyautogen", "elasticsearch-curator", "aws-cdk-aws-elasticloadbalancingv2", "portion", "fastapi-cache2", "django-solo", "mypy-boto3-transfer", "mypy-boto3-codebuild", "mypy-boto3-shield", "first", "asyncio-throttle", "certbot", "pathfinding", "mypy-boto3-docdb", "aws-cdk-aws-ecs", "mypy-boto3-sso-oidc", "mypy-boto3-dlm", "rule-engine", "mypy-boto3-amplify", "python-jwt", "sqlvalidator", "arraykit", "pcpp", "benchmark-runner", "pybacklogpy", "mypy-boto3-fsx", "mypy-boto3-translate", "types-orjson", "django-admin-autocomplete-filter", "mypy-boto3-directconnect", "dataflows-tabulator", "zcbor", "pybedtools", "django-dirtyfields", "pyaml-env", "markdown-inline-graphviz-extension", "mypy-boto3-meteringmarketplace", "mypy-boto3-acm-pca", "flashlight-text", "workos", "python-baseconv", "csscompressor", "mypy-boto3-comprehendmedical", "types-pkg-resources", "sklearn-crfsuite", "opteryx", "pulp-glue", "sqlalchemy-databricks", "kolo", "ffmpeg", "domain2idna", "httpstan", "esprima", "dbnd", "micloud", "mypy-boto3-cur", "aws-cdk-aws-autoscaling", "sagemaker-datawrangler", "graphene-sqlalchemy", "detect-delimiter", "pycollada", "traits", "opentelemetry-instrumentation-tornado", "aws-cdk-aws-cognito", "mypy-boto3-datasync", "grafanalib", "mypy-boto3-imagebuilder", "bingads", "nodejs-wheel-binaries", "robotframework-appiumlibrary", "meteostat", "ci-info", "mypy-boto3-elasticbeanstalk", "jax-cuda12-pjrt", "mypy-boto3-fms", "mypy-boto3-serverlessrepo", "assemblyline-v4-service", "mygeotab", "mypy-boto3-compute-optimizer", "pytest-mpl", "pykml", "sqlite-fts4", "aliyun-python-sdk-core-v3", "actions-toolkit", "mypy-boto3-health", "pyarrow-stubs", "mypy-boto3-forecast", "yeref", "coiled", "pdfminer", "mypy-boto3-globalaccelerator", "iso4217", "bert_score", "mypy-boto3-importexport", "django-modelcluster", "mypy-boto3-ds", "prometheus-async", "k8", "lbt-dragonfly", "faust-cchardet", "mypy-boto3-discovery", "mypy-boto3-inspector", "mypy-boto3-groundstation", "aws-cdk-aws-codebuild", "google-cloud-dialogflow-cx", "mypy-boto3-glacier", "aws-packages", "aiodogstatsd", "ipylab", "bindep", "mmdet", "dm-haiku", "psd-tools", "mypy-boto3-forecastquery", "huaweicloudsdkcore", "mypy-boto3-storagegateway", "mypy-boto3-iot1click-devices", "python-logstash-async", "aws-cdk-aws-route53-targets", "mypy-boto3-mediastore", "mypy-boto3-devicefarm", "calver", "mypy-boto3-elastictranscoder", "stix2-patterns", "synapseml", "mypy-boto3-cognito-sync", "tinybird-cli", "mypy-boto3-iot1click-projects", "weread2notionpro", "mypy-boto3-greengrass", "mypy-boto3-snowball", "etelemetry", "mosek", "can-isotp", "mypy-boto3-sms-voice", "mypy-boto3-mediatailor", "geode-background", "mypy-boto3-mediaconvert", "mysql-python", "mdformat-tables", "pwlf", "zope-sqlalchemy", "ceja", "pynose", "pandoc", "blosc", "mypy-boto3-gamelift", "amazon-textract-response-parser", "aws-error-utils", "soda-core-duckdb", "mypy-boto3-mgh", "async-asgi-testclient", "mypy-boto3-mediastore-data", "mypy-boto3-sms", "markdown-include", "python-status", "certvalidator", "mypy-boto3-mediapackage-vod", "mypy-boto3-codeartifact", "mypy-boto3-connectparticipant", "mypy-boto3-frauddetector", "oic", "apache-airflow-providers-presto", "rejson", "pyjson5", "pyclothoids", "reverse_geocoder", "mypy-boto3-datapipeline", "aws-cdk-aws-kinesis", "mypy-boto3-accessanalyzer", "mammoth", "dagster-snowflake", "mypy-boto3-marketplace-entitlement", "pyarmor-cli-core", "mypy-boto3-mediapackage", "mypy-boto3-iotsecuretunneling", "whichcraft", "mypy-boto3-budgets", "sanitize-filename", "python-subunit", "mypy-boto3-sdb", "mypy-boto3-elastic-inference", "iteration_utilities", "dragonfly-energy", "flask-session2", "pyspark-test", "deepgram-sdk", "memepy", "linear_operator", "django-pgtrigger", "mypy-boto3-chime", "rook", "mxnet-mkl", "pydotplus", "eccodes", "pylint-gitlab", "mypy-boto3-detective", "click-configfile", "compressed-tensors", "awkward0", "fugue-sql-antlr", "pyhdb", "pandas-flavor", "mypy-boto3-s3control", "pyvo", "adbc-driver-manager", "click-shell", "versioningit", "nbdime", "tldrwl", "scenedetect", "pyspark-stubs", "aws-cdk-aws-cloudfront", "scrubadub", "conllu", "slack", "mypy-boto3-rds-data", "filesplit", "rstcheck-core", "dramatiq", "uproot3", "uproot3-methods", "mdutils", "finlab", "fast-curator", "mypy-boto3-workspaces", "pysnooper", "mypy-boto3-medialive", "sccache", "cobble", "aws-cdk-aws-elasticloadbalancing", "postmarker", "mypy-boto3-application-insights", "treelite-runtime", "table-logger", "pytensor", "djoser", "qds-sdk", "django-recaptcha", "neptune", "assemblyline-service-client", "mo-future", "pulp-cli", "apache-airflow-providers-apache-beam", "mypy-boto3-codedeploy", "arize-phoenix", "h3-pyspark", "breadability", "optimizely-sdk", "python-quickbooks", "apache-airflow-providers-grpc", "aws-cdk-aws-autoscaling-hooktargets", "whatthepatch", "ragged-buffer", "keplergl", "sparkaid", "mypy-boto3-migrationhub-config", "bioregistry", "tortoise-orm", "types-enum34", "crhelper", "alibabacloud-tea-openapi", "kedro-viz", "flask-redis", "pymc", "scylla-driver", "deepface", "python_jsonschema_objects", "urllib3-mock", "mypy-boto3-appsync", "cdk-ecr-deployment", "strsimpy", "unleashclient", "mail-parser", "mkdocs-mermaid2-plugin", "astronomer-providers", "mypy-boto3-appstream", "mypy-boto3-swf", "amundsen-common", "dataset", "latex2mathml", "mypy-boto3-iotanalytics", "favicon", "zipcodes", "sqlakeyset", "mypy-boto3-appmesh", "injectool", "flake8-return", "cx_freeze", "flake8-deprecated", "timeago", "python-etcd", "pyfcm", "mypy-boto3-kinesisanalytics", "stanza"] Now I'm going to check where they disagree: df["conda_lock"] = conda_lock_result
df["parselmouth"] = parselmouth_result
df["grayskull"] = grayskull_result
discrepancies = df[
df.apply(
lambda row: not (
row["conda_lock"] == row["grayskull"]
and row["grayskull"] in row["parselmouth"]
),
axis=1,
)
] |
The full result
Interpreting these results requires subjective analysis... |
I am likely wrong about some of these, so corrections are much appreciated!
I'll stop here since this is fairly time-consuming. My takeaway is that both Grayskull and conda-lock have a lot of room for improvement. Also they are failing for different reasons, so I think that unifying the efforts could lead to a dramatic improvement. Finally, Parselmouth has a lot of potential if it were to invert its mapping. |
To be more specific, Grayskull's approach is basically to guess at the correct conda-forge name by querying anaconda.org with the original PyPI name and a few variations. There is a community-maintained table of exceptions for cases where the heuristic fails and someone bothers to add it. This works well surprisingly often, but fails on cases where it discovers the wrong package, like Conda-lock's approach is to rely on bot-generated mappings with a separate table of exceptions. I looked at the bot code in detail a few years back, and I was impressed by the clever graph-theoretic heuristics to prioritize conflicting dependencies. However, the code is fairly old and tricky to understand, and when something goes wrong (regro/cf-scripts#3031) it's not so easy to diagnose. The source of truth for the PyPI package is the recipe's source URL. This fails in cases like Parselmouth takes another approach and parses the metadata in the individual Conda archives. In particular, it uses the Some scattered thoughts on the situation:
|
The bot's code is a good sign that complexity in this task makes it harder to debug and reason about. Given the info above, I'd vote for the parslemouth approach plus a hand-built table of exceptions/overrides/defaults for things that fail, are wrong, aliases, etc. |
Id be more than happy to host this solution in the conda-forge-metadata package (which is on pypi too). |
Ya, I'm mostly thinking along these lines too. I think we ideally want the exception table to be machine-assisted though. I'd rather we pick out the uncertain mappings and flag them for a human to decide rather than for breakage to occur and someone get annoyed enough to open a PR. In any case we'll need users to download a table, so unless @nichmor volunteers for it, I'm inclined to say we should build the table ourselves.
Thanks!!! I just wonder what architecture we need. Like if we generate our own mapping, I would advocate to put that in a separate repository in order to separate the code from the data. |
I'd rather have the table file in the same spot as the metadata package along with the code to make it. We can version it separately ofc. |
You have a lot more experience than I do in this precise subject, so I'll defer to your judgement here. But a few considerations are on my mind:
|
Some more data on inverting Parselmouth: match_lengths = [len(matches) for matches in parselmouth_result]
df["match_length"] = match_lengths
print(df.match_length.value_counts())
PyPI packages with more than two conda-forge matchesWe should be able to handle these no problem by hand since there are only 7. df[df.match_length > 2] The unabridged lists [
[
"cffi",
"google-cloud-sdk",
"pypy3.9"
],
[
"argon2-cffi",
"argon2_cffi",
"privy"
],
[
"cloudpathlib",
"cloudpathlib-all",
"cloudpathlib-azure",
"cloudpathlib-gs",
"cloudpathlib-s3"
],
[
"pandera",
"pandera-base",
"pandera-core"
],
[
"pyqt",
"pyqt-impl",
"pyqtwebkit"
],
[
"_dvc",
"dvc",
"dvc-base"
],
[
"ibis-clickhouse",
"ibis-dask",
"ibis-framework",
"ibis-framework-core",
"ibis-hdf5",
"ibis-impala",
"ibis-mysql",
"ibis-parquet",
"ibis-postgres",
"ibis-pyspark",
"ibis-sqlite"
]
] PyPI packages with exactly two conda-forge matchesThese will be tricky, and I think we'll want heuristics for them. There are enough that it'd be helpful to have a solution requiring minimal human intervention to keep up-to-date. PyPI packages with no conda-forge matchesFor this I should be more careful with the Grayskull results and filter out conda-forge packages that don't exist: from grayskull.base.pkg_info import is_pkg_available
from tqdm.notebook import tqdm
grayskull_filtered = [n if is_pkg_available(n) else None for n in tqdm(grayskull_result)]
df["grayskull"] = grayskull_filtered
df[df.match_length == 0].head(30) Going down the list, I see various categories:
|
A few comments:
Here is a proposal:
|
I think we're broadly in agreement. I still have more questions about the details though...
This feels pretty infrequent to me, but we could probably make it work (see my comment below on fallback). On the other extreme, Parselmouth runs every 10 minutes, but it seems to only update on average once every five hours.
Sure, that should work well. When I install
I haven't checked the quality, but I believe Parselmouth is this. So I don't know that this direction is necessary. Everything I've said in this issue is exclusively related to pypi → conda-forge.
Shouldn't the results file already include the overrides? (I mean, I don't think we'd want to ignore it when we compute our update.) That way the lookup function doesn't need any logic.
In case of a missing entry, we might be perform a Grayskull-style fallback by polling anaconda.org for a package of a similar name. In contrast to my last remark, this would add logic, but it might be a sufficient stopgap for newly-added packages in 95% of cases.
So each time the mapping updates we would have to cut a new release, even if the code is unchanged? And then we'd have to deal with the corresponding perpetual conda-forge package updates? That seems pretty messy to me.
I do like the idea of using
I'm actually really fond of the structure in regro/cf-graph-countyfair. I like the way there is YAML for readable diffs alongside the minified JSON.
Ya, I was skeptical until looking at the numbers for Parselmouth. It's been running on a 10 minute cadence since May (just under 6 months), with 756 mapping updates, and the I hope I'm not getting annoying on this point, but on the other hand, what do you see as the benefit to having the generated mappings in the same repository as the code? It seems to me like it'd be so easy to just create a separate repo containing just the |
Thanks a bunch and no worries. Ad hoc things have been the issue for this task, so the discussion is helpful to remove that ambiguity.
|
Thanks so much @beckermr for your patience on this. Agreed that it's helpful to work out these details.
💯 on keeping the overrides separate from the rest of the input data. But the output data should already include the overrides, right? In terms of transparency on what's being changed in a multi-step process, I would try to solve that with intermediate artifacts.
Ah, ok, I'm glad you wrote this because I think we're trying to solve subtly different problems here. I'm primarily interested in creating a best-guess heuristic that can be shared between conda-lock, Grayskull, and whoever else wants to use it. It seems like you want to create official metadata. So in that case it seems like a two-tiered approach would make sense:
Is this what you had in mind?
I'm constantly trying to improve my sense of design, and I know that I have a long ways to go. When to combine/split stuff seems like one of the fundamental challenges. In this particular case all my instincts are screaming to keep them separate, but I do believe that you probably know better than I do. If these examples are public, is this something I could take a look at in order to understand the benefit of consolidation?
So to be explicit, the mapping artifact would be included in the PyPI distribution, and distinct artifacts would have distinct conda-forge-metadata versions? |
The three things I have gotten rid of are:
All of these broke on a regular basis, encountered fundamental limitations/errors, and needed babysitting. I am glad to no longer have to watch over them. Yes I had a two-step process in mind with conda-forge-metadata only handling the first step.
Yes that is the idea. This way everything is versioned and we can track down errors, weird things, etc. |
These are wheels with the CUDA Toolkit libraries and headers. The naming scheme should follow a common pattern between Conda and PyPI There's some overlap between the two efforts. So it should be possible for folks involved to help inform that mapping once we are settled on where it lives |
Maybe @ruben-arts and/or @wolfv will have thoughts on the structure of this mapping 🙂 |
hey @maresb ! First, thanks a lot for your tests and effort in comparing these 3 tools! Indeed parselmouth would benefit by having an inverted mapping - maybe initially under the files as we store it for conda-forge and pytorch ( https://github.com/prefix-dev/parselmouth/tree/main/files ). We also have a related issue to map more than to one pypi-name that I think we should take into account ( prefix-dev/parselmouth#11 ). Your list with some differences between parselmouth and other mapping tools is also a very good start for me to understand how parselmouth can cover it. A little about
In this way, we can guarantee having the best mapping for package and cover cases when one platform has something different than others, or even to know to what exactly version it maps. (for example maybe conda-forge package has a different version on its pypi under the hood). This way we can also have mappings for all channels ( we have for pytorch also ), or it's mirrors, and we can save some storage by using CAS approach here. My vision is that it can also give us a confident step to this ( conda/ceps#63 ) , so we can use parselmouth to extract it. let me know if you have any questions or if I have missed something. p.s Sorry for the long reply - I was on vacation during the initial discussion |
Welcome back @nichmor! When I get the chance I'd like to read the full parselmouth source to understand all the details, since the data is such good quality. As the next step in computing the likely candidates for overrides, I think the biggest open case is detecting PyPI packages with no conda-forge matches For this I would like to look at conda-forge package names and do Grayskull-style guessing to find PyPI packages that have a similar name but aren't directly included as Python packages by conda-forge (as detected by Parselmouth). For that I need a list of available conda-forge package names. This sounds simple, but I'm actually a bit stuck on a simple way to get this. Ideas @beckermr or anyone else? |
Look at our feedstock-outputs repo. Each package has a json file in that repo. |
(or you can use the |
Hey @maresb! We have a first iteration of the reverse PyPI-to-Conda mapping ready. The PR in progress is here: prefix-dev/parselmouth#33. The main idea is that by accessing a specific URL: you’ll receive a dictionary mapping versions of a PyPI package to the corresponding Conda package names. Right now, it only includes Conda names, but we plan to extend it to include Conda versions as well, which will make it more accurate. The full mapping file is available here: The mapping schema will be stored near the mapping location: This way, we can version it and maintain older schemas for better self-documentation. It’s not merged yet (some edge cases still need to be covered), but all the mappings are uploaded, so you can start experimenting. We also plan to release this as both a CLI tool and a library, so you can use it directly from your terminal or within your app. |
I'm aware of three sources of truth for the correspondence between PyPI and Conda names.
In order to reduce duplication, it would be nice to consolidate some of these, and especially to uniformize the edge cases. I'm very curious what @nichmor and @mariusvniekerk think.
The text was updated successfully, but these errors were encountered: