After upgrading to Yosemite from Mountain Lion I've spent quite a bit of time getting all my packages working again, but I'm left with one weird issue. When I try to both save and show a matplotlib plot I get the following error:
Assertion failed: (s->stack->next != NULL), function CGGStackRestore, file Context/CGGStack.c, line 77.
The following short script produces this error, but works as expected if I comment out either the savefig or the show command.
import matplotlib.pyplot as pl
def main():
pl.plot(range(10),range(10))
pl.savefig('bugplot.jpg')
pl.show()
return
I'm using python 2.7, installed through homebrew, with my scipy, numpy and matplotlib packages all updated to the latest versions through pip. Saving a figure as well as showing it was working fine before I upgraded to Yosemite (and performed all the associated updates to xcode,homebrew,python,etc.), but I couldn't say exactly which versions I was using before. I can work around this problem of course, but it is bugging me, and I like getting a quick look at my figures while saving them, so any help would be much appreciated.
Related
I am using PyCharm on my MacBook to code and now I wanted to make a simple plot. When I run the file via the usual 'Run' command (do not know what it is called), it nicely shows my plots, but when I run the file in the Python console (which I find more convenient because you can access your variables) it does not show anything. On the other hand, when I just type it in the Python console afterwards, it does work.
I have read some things about backends and other 'solutions' as I am apparently not the only one with this issue. Mine says macosx and gives the command: "Backend MacOSX is interactive backend. Turning interactive mode on." after running the file in the Python console. I tried changing the backend:
import matplotlib
# matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
but that does not work (no plot pops up). And yes, I use plt.show() after my plotting section :)
I also tried with 'QtAgg' but then I get: "ImportError: Failed to import any qt binding"
Now I am completely new to this backends stuff (I think it has to do with this), so I could really use some clear directions on how I can solve this issue.
Thanks in advance!
I am not sure we can solve this bug with some adjustment. I think you need to fresh start. I suggest you to start a new clean venv and install a new matplotlib there.
I'm having trouble getting an exe generated by PyInstaller on one PC (PC-Good) working on another (PC-Bad).
The exe is created on PC-Good, and executes as expected on PC-Good
Both PCs are running Windows 10
Issue occurs on PC-Bad upon calling most of the matplotlib.pyplot methods (such as subplots() or plot())
Issue persists even when matplotlib is in non-interactive mode
No error is reported upon failure. exe simply exits
even when matplotlib verbosity is changed to 'debug'
even when the problem statement is captured in try-exception
See below for code:
print('Start')
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
print("Import of matplotlib & pyplot successful")
plt.set_loglevel("debug")
x = [0, 1, 2, 3, 4]
y = [4, 3, 2, 1, 0]
print('list creation successful')
try:
fig, ax = plt.subplots(1, 1, figsize=(12, 6))
except Exception as exception:
print(exception.__class__.__name__ + ": ", + exception.message)
finally:
print('run subplots() successful')
plt.scatter(x, y)
print('plot creation successful')
plt.savefig('saved_plot.png')
print('code complete')
Output on PC-Good:
Start
C:\tools\miniconda3\envs\bcht\lib\site-packages\PyInstaller\loader\pyimod03_importers.py:623: MatplotlibDeprecationWarning:
The MATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.
exec(bytecode, module.__dict__)
Import of matplotlib & pyplot successful
list creation successful
run subplots() successful
plot creation successful
DEBUG:matplotlib.font_manager:findfont: ...
(and many more matplotlib DEBUG messages)
code complete
Output on PC-Bad:
Start
C:\tools\miniconda3\envs\bcht\lib\site-packages\PyInstaller\loader\pyimod03_importers.py:623: MatplotlibDeprecationWarning:
The MATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.
Import of matplotlib & pyplot successful
list creation successful
Since I get no error output, I'm quite lost as to where to go next. Matplotlib documentation doesn't offer any additional tips on getting more granular debug messages for methods like plot or subplots. Has anyone else observed such an issue or know of a fix? Or does anyone know if there's a way to get Matplotlib to tell me more?
There can be multiple reasons for this.
Pyinstaller didn't include modules "completely" : pyinstaller tries to reduce size by including only those parts of modules which are used by your application. It might not have detected the use of some vital part of module and not included it. Try using pyinstaller in one directory mode. Then you will be able to see the module selected by pynstaller. If something is missing then next time you can specify to include that module.
Try putting checkpoints like print("reached some function") in your code for debugging purpose. It will make it easier to find where is the problem.
Also try to run the code in a normal python on target computer.
I found a workaround for this issue, which I can't call a fix yet due to the fact that neither PyInstaller nor MatPlotlib provides any debug message to further the investigation for rootcause. Nevertheless, it gets rid of the issue that I was seeing.
TL;DR
Issue is due to incompatibility when using PyInstaller to generate executable with Python codes with matplotlib 3.1.3 and numpy 1.18.1. This incompatibility does not cause the python script itself to error out. This incompatibility does not produce any error message or symptoms that would point to itself, thus, making it difficult to rootcause.
If anyone observes a frozen executable quitting silently without any error message. It's worthwhile to investigate whether this is due to library incompatibility. If the quitting occurs during execution of mpl methods, then look into numpy immediately.
Now the TL:
It started with a suspicion that the issue was due to virtual environment or conda meddling with the freezing process (they are not) so I used another computer to install a clean python (3.7.9), and matplotlib 3.1.3 which populated all its dependencies automatically (let's call this new environment "lean env" and the Source PC in the problem statement "full env"). I replicated the bundling/freezing process on lean env and everything works fine. At this point, I noticed that a number of libraries in the lean env are newer than the full env. So I upgraded them all on the full env, including:
numpy from 1.18.1 to 1.20.0
kiwisolver from 1.3.0 to 1.3.1
After this, the full env is also able to generate a bundle that works perfectly fine when run on both Source PC and Target PC. So the problem is likely to be the "silent" incompatibility between matplotlib 3.1.3 and one of those two.
To narrow things further, I reverted numpy to 1.18.1 in the full env and reproduced the old problem I saw. There it is.
The frustrating aspect of this is that neither numpy nor matplotlib generated any discernable error (nor Pyinstaller). In addition, matplotlib itself does not have any method to produce any useful verbose debug message to further the investigation. (I did turn on the log_level of matplotlib to debug, but only got some info indicating the fonts being used.) For this reason, I will not proceed any further to investigate. The workaround is sufficient for my use. If anyone else is interested, feel free to proceed by interrogating mpl. Neither will I conduct further interop between pyinstaller, matplotlib, and numpy. All I'll say is:
Good: matplotlib==3.1.3, numpy==1.20.0, pyinstaller==3.6
Bad: matplotlib==3.1.3, numpy==1.18.1, pyinstaller==3.6
There are questions referring to this same error message, but the crucial difference is that I am not (deliberately) using Qt. I don't actually know what it is, and I am trying to run my program on cmd, not through any IDE. I have been using matplotlib without any problems until just now, when i suddenly got the error message:
This application failed to start because it could not find or load the Qt platform plugin "windows"
in "".
Available platform plugins are: direct2d, minimal, offscreen, windows.
Reinstalling the application may fix this problem.
here is a sample program which produces this error, although I suspect it is a consequence of the package being used, not the program
import matplotlib.pyplot as plt
nums = [1,2,3,4]
labels = ["one","two","three","four"]
colours, one, two = plt.pie(nums, labels=labels, autopct='%1.1f%%')
plt.legend(colours, labels, loc="best")
plt.axis('equal')
plt.show()
again, I installed matplotlib years ago, and have been using it just fine until now. Any help would be greatly appreciated.
edit: python version 3.7.1, matplotlib version 3.1.1
Ok, I just fixed it by upgrading matplotlib to version 3.2.1
not sure why that worked but hey
I'm trying to display the results of a simple function animated over time. There are many examples of this on matplotlib and stackoverflow (typical link below). All of these produce the same dysfunctionality: the axes appear, but the data doesn't: the content of the plot is blank. I'm literally copying and pasting tutorial code, so it seems likely to be a configuration issue, rather than a coding error.
A number of similar problems have been reported, but none of the answers seem to work. I'm on a current Mac with OSX 10.13.4, running python 3.6.5 and recently updated matplotlib. Per suggestions from other questions I've set up a Framework installation of python 3.6.5, straight from python.org. No change in behavior running outside or within a virtual environment (tried virtualenv and venv).
I haven't encountered problems with plots that don't attempt to animate - they work fine.
I've tried running many examples from the command line (bash), the PyCharm IDE, and in Jupyter, with same result (everything but animations works). There are no error messages except for examples that attempt to save images - those crash with a long error log (e.g. Animating "growing" line plot in Python/Matplotlib produces "ValueError: Invalid file object: <_io.BufferedReader name=65>" after pages of traceback). In such examples commenting out the save prevents the crash, but the plot remains empty.
Advice much appreciated.
I have a very strange problem that appeared recently, more or less simultaneously to my Ubuntu upgrade to 16.10.
Using Pyplot, when I use LaTeX in labels, Python3 gives back something very strange. For example, I tried to compile the example from
http://matplotlib.org/examples/text_labels_and_annotations/text_demo_fontdict.html
and I got this result:
I try to upgrade my matplotlib with pip, but nothing changed. Right now:
numpy=1.11.1, matplotlib=1.5.3
Interestingly, this problem disappears when I go back to python2, and the conversion is good.
Edit: on another machine, with Ubuntu 16.10 up-to-date, the same mpl and np versions, this bug appears in python3 AND python2.
EEdit : I did not find the problem, but a guess is a problem in the cm font of matplotlib. I tried to change the font (see e.g. How do I change the axis tick font in a matplotlib plot when rendering using Latex?), and the problem disappeared...
Thanks in advance for your help!