You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Confusing error message when home config directory not writable #18011
If matplotlib is run in an environment without a writable home directory, a very confusing error message is printed in which the configdir and the tempdir are interchanged.
Code for reproduction
In Linux, create a user someone with no home directory.
Run Python with a command like
sudo -u someone python3
In the Python shell, type import matplotlib
Actual outcome
Matplotlib created a temporary config/cache directory at /root/.config/matplotlib because the default path (/tmp/matplotlib-9yoi7m8l) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
Expected outcome
Matplotlib created a temporary config/cache directory at /tmp/matplotlib-9yoi7m8l because the default path (/root/.config/matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
Matplotlib was compiled from source. The error is at line 482 in __init__.py at the root level in the source tree. The parameters are the wrong way round.
Does anyone know if this warning message can be suppressed? If not, any chance there's interest in adding an environment variable to optionally suppress the warning?
something like (but better named ;):
index 71afd3928d..01f8d15fab 100644
--- a/lib/matplotlib/__init__.py+++ b/lib/matplotlib/__init__.py@@ -481,13 +481,14 @@ def _get_config_or_cache_dir(xdg_base_getter):
tmpdir = os.environ["MPLCONFIGDIR"] = \
tempfile.mkdtemp(prefix="matplotlib-")
atexit.register(shutil.rmtree, tmpdir)
- _log.warning(- "Matplotlib created a temporary config/cache directory at %s because "- "the default path (%s) is not a writable directory; it is highly "- "recommended to set the MPLCONFIGDIR environment variable to a "- "writable directory, in particular to speed up the import of "- "Matplotlib and to better support multiprocessing.",- tmpdir, configdir)+ if not os.environ.get("MPLNOCACHEWARN"):+ _log.warning(+ "Matplotlib created a temporary config/cache directory at %s because "+ "the default path (%s) is not a writable directory; it is highly "+ "recommended to set the MPLCONFIGDIR environment variable to a "+ "writable directory, in particular to speed up the import of "+ "Matplotlib and to better support multiprocessing.",+ tmpdir, configdir)
Or, perhaps switch to using the warnings module for the message, and give it a category, then allow people to suppress it via warnings.filterwarnings(category).
Activity
Fix flipped paths in non-writable config dir warning.
YuantianGao commentedon Jul 6, 2021
I have the same issue, did you solve it?
tacaswell commentedon Jul 6, 2021
@YuantianGao Yes, we fixed the order of the paths in #18014 and this should be fixed in all versions after 3.3.1.
ttarabula commentedon Sep 23, 2021
Does anyone know if this warning message can be suppressed? If not, any chance there's interest in adding an environment variable to optionally suppress the warning?
something like (but better named ;):
Or, perhaps switch to using the warnings module for the message, and give it a category, then allow people to suppress it via warnings.filterwarnings(category).
jklymak commentedon Sep 23, 2021
You can filter logging module warnings as well: https://docs.python.org/3/library/logging.html