Title: [Bug]: Avoid generating font cache on import time · Issue #28485 · matplotlib/matplotlib · GitHub
Open Graph Title: [Bug]: Avoid generating font cache on import time · Issue #28485 · matplotlib/matplotlib
X Title: [Bug]: Avoid generating font cache on import time · Issue #28485 · matplotlib/matplotlib
Description: Bug summary Matplotlib generates as a side-effect a font cache during import time. This is needed for plotting functionality to work. Unfortunately, this also means that any (transitive) dependency that eagerly imports matplotlib will no...
Open Graph Description: Bug summary Matplotlib generates as a side-effect a font cache during import time. This is needed for plotting functionality to work. Unfortunately, this also means that any (transitive) dependency...
X Description: Bug summary Matplotlib generates as a side-effect a font cache during import time. This is needed for plotting functionality to work. Unfortunately, this also means that any (transitive) dependency...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/28485
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: Avoid generating font cache on import time","articleBody":"### Bug summary\n\nMatplotlib generates as a side-effect a font cache during import time. This is needed for plotting functionality to work. Unfortunately, this also means that any (transitive) dependency that eagerly imports matplotlib will now result in the cache to be generated, even when the user is at no time using matplotlib.\r\n\r\nI opened an issue about this 8 years ago https://github.com/matplotlib/matplotlib/issues/7592/. At the time the issue was regarding Linux. Now, it seems the behaviour has changed on MacOS and it happens there as well.\n\n### Code for reproduction\n\n```Python\nimport matplotlib\n```\n\n\n### Actual outcome\n\n```\r\n/nix/store/774r81hjzn2p64jnsdyk0cl2rbjabghj-python3-3.12.3-env/lib/python3.12/site-packages/matplotlib/font_manager.py:270: in _get_macos_fonts\r\n subprocess.check_output([\"system_profiler\", \"-xml\", \"SPFontsDataType\"]))\r\n/nix/store/65ackbgqn02p6fy75rksjbp17zj6440j-python3-3.12.3/lib/python3.12/subprocess.py:466: in check_output\r\n return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,\r\n/nix/store/65ackbgqn02p6fy75rksjbp17zj6440j-python3-3.12.3/lib/python3.12/subprocess.py:548: in run\r\n with Popen(*popenargs, **kwargs) as process:\r\n/nix/store/65ackbgqn02p6fy75rksjbp17zj6440j-python3-3.12.3/lib/python3.12/subprocess.py:1026: in __init__\r\n self._execute_child(args, executable, preexec_fn, close_fds,\r\n/nix/store/65ackbgqn02p6fy75rksjbp17zj6440j-python3-3.12.3/lib/python3.12/subprocess.py:1955: in _execute_child\r\n raise child_exception_type(errno_num, err_msg, err_filename)\r\nE FileNotFoundError: [Errno 2] No such file or directory: 'system_profiler'\r\n```\n\n### Expected outcome\n\nPreferably no side-effect during import-time. Or, as a work-around, some option such as an environment variable to disable the side-effect.\n\n### Additional information\n\nObviously if packages would not import matplotlib eagerly this would not be an issue. However, as a end-user this cannot be controlled. Anywhere in the dependency-tree one could import a library that is not required per se. But that does not mean libraries should just do side-effects during import time. Having an environment variable to disable the cache building would already be great, as it would provide a way out, other than trying to patch a (transitive) dependency.\n\n### Operating system\n\nOSX\n\n### Matplotlib Version\n\n3.9.0\n\n### Matplotlib Backend\n\n_No response_\n\n### Python version\n\n3.12\n\n### Jupyter version\n\n_No response_\n\n### Installation\n\nNone","author":{"url":"https://github.com/FRidh","@type":"Person","name":"FRidh"},"datePublished":"2024-06-28T07:30:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":11},"url":"https://github.com/28485/matplotlib/issues/28485"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:a7f8d315-8ab0-4a60-1cb1-8390a20dd56a |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D120:39978:A76F825:AAFE08E:6A50BCDC |
| html-safe-nonce | 34688d2964b4db044c42d3778e3beafaa3537252f2cd06f10750b6d0cb846b78 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMTIwOjM5OTc4OkE3NkY4MjU6QUFGRTA4RTo2QTUwQkNEQyIsInZpc2l0b3JfaWQiOiIyMTUxODIzOTQ2MTY0NTE4MTA4IiwicmVnaW9uX2VkZ2UiOiJzZWEiLCJyZWdpb25fcmVuZGVyIjoic2VhIn0= |
| visitor-hmac | 532ab2484d7b308658ff75a91ccf6c22488ecc352beb93972bf8f894ec32483e |
| hovercard-subject-tag | issue:2379788966 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/28485/issue_layout |
| twitter:image | https://opengraph.githubassets.com/5022a503aea66e9b3fe90371e71f87565c91969d3d56f3fe11c9d874572f02cb/matplotlib/matplotlib/issues/28485 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/5022a503aea66e9b3fe90371e71f87565c91969d3d56f3fe11c9d874572f02cb/matplotlib/matplotlib/issues/28485 |
| og:image:alt | Bug summary Matplotlib generates as a side-effect a font cache during import time. This is needed for plotting functionality to work. Unfortunately, this also means that any (transitive) dependency... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | FRidh |
| hostname | github.com |
| expected-hostname | github.com |
| None | 72b13e0e8d0319acdd27a145cfe73f4f06c791713d0ac4690e41fb68ad28cac0 |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 08e79d53fc070870d5b168356afebb1e286a2ffe |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width