Skip to content

Commit 5c2a407

Browse files
authored
DEPS: Add warning if pyarrow is not installed (pandas-dev#56896)
* add warning * DEPS: Add warning if pyarrow is not installed * formatting * Update __init__.py * adjustments * adjustments * updates * address code review * Update __init__.py * add pyarrow to npdev build * ignore non numpy related deprecationwarnings/futurewarning * ignore non numpy related deprecationwarnings/futurewarning * Update actions-311-numpydev.yaml
1 parent ee32f76 commit 5c2a407

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

.github/workflows/unit-tests.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ jobs:
9292
- name: "Numpy Dev"
9393
env_file: actions-311-numpydev.yaml
9494
pattern: "not slow and not network and not single_cpu"
95-
test_args: "-W error::DeprecationWarning -W error::FutureWarning"
95+
# Currently restricted the warnings that error to Deprecation Warnings from numpy
96+
# done since pyarrow isn't compatible with numpydev always
97+
# TODO: work with pyarrow to revert this?
98+
test_args: "-W error::DeprecationWarning:numpy -W error::FutureWarning:numpy"
9699
- name: "Pyarrow Nightly"
97100
env_file: actions-311-pyarrownightly.yaml
98101
pattern: "not slow and not network and not single_cpu"

pandas/__init__.py

+31-2
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,37 @@
202202
FutureWarning,
203203
stacklevel=2,
204204
)
205-
# Don't allow users to use pandas.os or pandas.warnings
206-
del os, warnings
205+
206+
# DeprecationWarning for missing pyarrow
207+
from pandas.compat.pyarrow import pa_version_under10p1, pa_not_found
208+
209+
if pa_version_under10p1:
210+
# pyarrow is either too old or nonexistent, warn
211+
from pandas.compat._optional import VERSIONS
212+
213+
if pa_not_found:
214+
pa_msg = "was not found to be installed on your system."
215+
else:
216+
pa_msg = (
217+
f"was too old on your system - pyarrow {VERSIONS['pyarrow']} "
218+
"is the current minimum supported version as of this release."
219+
)
220+
221+
warnings.warn(
222+
f"""
223+
Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),
224+
(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)
225+
but {pa_msg}
226+
If this would cause problems for you,
227+
please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466
228+
""", # noqa: E501
229+
DeprecationWarning,
230+
stacklevel=2,
231+
)
232+
del VERSIONS, pa_msg
233+
234+
# Delete all unnecessary imported modules
235+
del pa_version_under10p1, pa_not_found, warnings, os
207236

208237
# module level doc-string
209238
__doc__ = """

pandas/compat/pyarrow.py

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import pyarrow as pa
99

1010
_palv = Version(Version(pa.__version__).base_version)
11+
pa_not_found = False
1112
pa_version_under10p1 = _palv < Version("10.0.1")
1213
pa_version_under11p0 = _palv < Version("11.0.0")
1314
pa_version_under12p0 = _palv < Version("12.0.0")
@@ -16,6 +17,7 @@
1617
pa_version_under14p1 = _palv < Version("14.0.1")
1718
pa_version_under15p0 = _palv < Version("15.0.0")
1819
except ImportError:
20+
pa_not_found = True
1921
pa_version_under10p1 = True
2022
pa_version_under11p0 = True
2123
pa_version_under12p0 = True

pandas/tests/test_common.py

+22
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import numpy as np
99
import pytest
1010

11+
import pandas.util._test_decorators as td
12+
1113
import pandas as pd
1214
from pandas import Series
1315
import pandas._testing as tm
@@ -265,3 +267,23 @@ def test_bz2_missing_import():
265267
code = textwrap.dedent(code)
266268
call = [sys.executable, "-c", code]
267269
subprocess.check_output(call)
270+
271+
272+
@td.skip_if_installed("pyarrow")
273+
@pytest.mark.parametrize("module", ["pandas", "pandas.arrays"])
274+
def test_pyarrow_missing_warn(module):
275+
# GH56896
276+
response = subprocess.run(
277+
[sys.executable, "-c", f"import {module}"],
278+
capture_output=True,
279+
check=True,
280+
)
281+
msg = """
282+
Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),
283+
(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)
284+
but was not found to be installed on your system.
285+
If this would cause problems for you,
286+
please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466
287+
""" # noqa: E501
288+
stderr_msg = response.stderr.decode("utf-8")
289+
assert msg in stderr_msg, stderr_msg

0 commit comments

Comments
 (0)