diff --git a/ci/deps/actions-310.yaml b/ci/deps/actions-310.yaml index bbc468f9d8f43..8f333c72f002c 100644 --- a/ci/deps/actions-310.yaml +++ b/ci/deps/actions-310.yaml @@ -11,6 +11,8 @@ dependencies: - pytest-xdist>=1.31 - hypothesis>=5.5.3 - psutil + - pytest-asyncio + - boto3 # required dependencies - python-dateutil @@ -21,6 +23,7 @@ dependencies: - beautifulsoup4 - blosc - bottleneck + - brotlipy - fastparquet - fsspec - html5lib @@ -42,6 +45,7 @@ dependencies: - pyxlsb - s3fs - scipy + - snappy - sqlalchemy - tabulate - xarray diff --git a/ci/deps/actions-38-downstream_compat.yaml b/ci/deps/actions-38-downstream_compat.yaml index f3fa95d03c98e..7386649f1c627 100644 --- a/ci/deps/actions-38-downstream_compat.yaml +++ b/ci/deps/actions-38-downstream_compat.yaml @@ -12,6 +12,8 @@ dependencies: - pytest-xdist>=1.31 - hypothesis>=5.5.3 - psutil + - pytest-asyncio + - boto3 # required dependencies - python-dateutil @@ -21,6 +23,7 @@ dependencies: # optional dependencies - beautifulsoup4 - blosc + - brotlipy - bottleneck - fastparquet - fsspec @@ -42,6 +45,7 @@ dependencies: - pyxlsb - s3fs - scipy + - snappy - sqlalchemy - tabulate - xarray @@ -52,17 +56,14 @@ dependencies: # downstream packages - aiobotocore - - boto3 - botocore - cftime - dask - ipython - geopandas - - python-snappy - seaborn - scikit-learn - statsmodels - - brotlipy - coverage - pandas-datareader - pyyaml diff --git a/ci/deps/actions-38-minimum_versions.yaml b/ci/deps/actions-38-minimum_versions.yaml index 2e782817f3f14..5726001ea1290 100644 --- a/ci/deps/actions-38-minimum_versions.yaml +++ b/ci/deps/actions-38-minimum_versions.yaml @@ -13,6 +13,8 @@ dependencies: - pytest-xdist>=1.31 - hypothesis>=5.5.3 - psutil + - pytest-asyncio + - boto3 # required dependencies - python-dateutil=2.8.1 @@ -23,6 +25,7 @@ dependencies: - beautifulsoup4=4.8.2 - blosc=1.20.1 - bottleneck=1.3.1 + - brotlipy=0.7.0 - fastparquet=0.4.0 - fsspec=0.7.4 - html5lib=1.1 @@ -44,6 +47,7 @@ dependencies: - pyxlsb=1.0.6 - s3fs=0.4.0 - scipy=1.4.1 + - snappy=1.1.8 - sqlalchemy=1.4.0 - tabulate=0.8.7 - xarray=0.15.1 diff --git a/ci/deps/actions-38.yaml b/ci/deps/actions-38.yaml index 60db02def8a3d..85a25571bb9fd 100644 --- a/ci/deps/actions-38.yaml +++ b/ci/deps/actions-38.yaml @@ -11,6 +11,8 @@ dependencies: - pytest-xdist>=1.31 - hypothesis>=5.5.3 - psutil + - pytest-asyncio + - boto3 # required dependencies - python-dateutil @@ -21,6 +23,7 @@ dependencies: - beautifulsoup4 - blosc - bottleneck + - brotlipy - fastparquet - fsspec - html5lib @@ -41,6 +44,7 @@ dependencies: - pyxlsb - s3fs - scipy + - snappy - sqlalchemy - tabulate - xarray diff --git a/ci/deps/actions-39.yaml b/ci/deps/actions-39.yaml index 2d6430afd0b36..8cff9539300f0 100644 --- a/ci/deps/actions-39.yaml +++ b/ci/deps/actions-39.yaml @@ -11,6 +11,8 @@ dependencies: - pytest-xdist>=1.31 - hypothesis>=5.5.3 - psutil + - pytest-asyncio + - boto3 # required dependencies - python-dateutil @@ -21,6 +23,7 @@ dependencies: - beautifulsoup4 - blosc - bottleneck + - brotlipy - fastparquet - fsspec - html5lib @@ -41,6 +44,7 @@ dependencies: - pyxlsb - s3fs - scipy + - snappy - sqlalchemy - tabulate - xarray diff --git a/doc/source/getting_started/install.rst b/doc/source/getting_started/install.rst index 8fe0fd1f78e61..8706292d60def 100644 --- a/doc/source/getting_started/install.rst +++ b/doc/source/getting_started/install.rst @@ -410,5 +410,7 @@ Compression ========================= ================== ============================================================= Dependency Minimum Version Notes ========================= ================== ============================================================= -Zstandard Zstandard compression +brotli 0.7.0 Brotli compression +snappy 1.1.8 Snappy compression +Zstandard 0.15.2 Zstandard compression ========================= ================== ============================================================= diff --git a/pandas/compat/_optional.py b/pandas/compat/_optional.py index cb9b0c6de6d3b..baae5c913c05d 100644 --- a/pandas/compat/_optional.py +++ b/pandas/compat/_optional.py @@ -13,6 +13,7 @@ "bs4": "4.8.2", "blosc": "1.20.1", "bottleneck": "1.3.1", + "brotli": "0.7.0", "fastparquet": "0.4.0", "fsspec": "0.7.4", "html5lib": "1.1", @@ -34,6 +35,7 @@ "pyxlsb": "1.0.6", "s3fs": "0.4.0", "scipy": "1.4.1", + "snappy": "1.1.8", "sqlalchemy": "1.4.0", "tables": "3.6.1", "tabulate": "0.8.7", @@ -50,6 +52,7 @@ INSTALL_MAPPING = { "bs4": "beautifulsoup4", "bottleneck": "Bottleneck", + "brotli": "brotlipy", "lxml.etree": "lxml", "odf": "odfpy", "pandas_gbq": "pandas-gbq", @@ -66,6 +69,9 @@ def get_version(module: types.ModuleType) -> str: version = getattr(module, "__VERSION__", None) if version is None: + if module.__name__ == "brotli": + # brotli doesn't contain attributes to confirm it's version + return "" raise ImportError(f"Can't determine version for {module.__name__}") if module.__name__ == "psycopg2": # psycopg2 appends " (dt dec pq3 ext lo64)" to it's version @@ -141,7 +147,7 @@ def import_optional_dependency( minimum_version = min_version if min_version is not None else VERSIONS.get(parent) if minimum_version: version = get_version(module_to_get) - if Version(version) < Version(minimum_version): + if version and Version(version) < Version(minimum_version): msg = ( f"Pandas requires version '{minimum_version}' or newer of '{parent}' " f"(version '{version}' currently installed)."