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
bz2 mistakenly made a hard requirement of matplotlib 2.2.2 #10866
The _bz2 module is made a dependency in matplotlib 2.2.2. At least up until matplotlib 2.1.1, this was not the case. I believe this is a mistake. Previously, the import of bz2 (in matplotlib/cbook/__init__.py) was made only when needed, inside the to_filehandle() function. In 2.2.2, this import is moved up to at the top of the file, meaning that it always try to import bz2 and by extension _bz2, regardless of whether it will be used or not.
This is a problem as _bz2 is not always installed, and not listed as a required dependency of matplotlib. I am able to fix the issue easily by moving the import of bz2 back down inside of the to_filehandle() function, or alternatively placing it inside a try/except block.
Actual outcome
>>> import matplotlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jeppe/Desktop/Desktop/concept_update_test/python/lib/python3.6/site-packages/matplotlib/__init__.py", line 127, in <module>
from . import cbook
File "/home/jeppe/Desktop/Desktop/concept_update_test/python/lib/python3.6/site-packages/matplotlib/cbook/__init__.py", line 13, in <module>
import bz2
File "/home/jeppe/Desktop/Desktop/concept_update_test/python/lib/python3.6/bz2.py", line 23, in <module>
from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2
Matplotlib version
Operating system: Linux Mint 17.3
Matplotlib version: 2.2.2
Python version: 3.6
I have installed both Python and matplotlib from source.
Reacted by Sam Murphy, Biki Deka and Kevin-Larke-Bose
@Ravi2712 You have as of now the following options:
Install bz2.
Revert back to matplotlib 2.1.2, where this error would not occur.
Use the workaround proposed in the OP, i.e. edit the matplotlib/cbook/__init__.py to put the line import bz2 back to its original place. This is what is done in the fix as well: https://github.com/matplotlib/matplotlib/pull/10867/files
Install current development version of matplotlib where this is fixed.
Wait till July or so when the next release happens that fixes this.
Reacted by Jay Patel, Sam Murphy, Bhaskar C, Cameron Cooks and stoneyang
Activity
tacaswell commentedon Mar 23, 2018
Fair enough. Optional parts of the standard library are surprising to me.
This change came in via 703dbdb in #10231 for 2.2.0 as what looks like just style cleanup (moving imports to the top).
MNT: move bz2 back to function level
Ravi2712 commentedon Jun 6, 2018
I am getting this error. I have added matplotlib in requirements.txt and I am installing via pip. I am running my project in python virtualenv.
If I am running in system, without activating virtualenv. It's working.
Matplotlib version:
Error log:
ImportanceOfBeingErnest commentedon Jun 6, 2018
@Ravi2712 You have as of now the following options:
bz2.matplotlib/cbook/__init__.pyto put the lineimport bz2back to its original place. This is what is done in the fix as well: https://github.com/matplotlib/matplotlib/pull/10867/filesRavi2712 commentedon Jun 7, 2018
@ImportanceOfBeingErnest : Installed current development version in virtualenv. It's working. Thank you.