Matplotlib Import Error : _backend_gdk.so:undefined symbol: PyArray_SetBaseObject
Question: I was trying to run the following code in OpenCV python.

    
    
    #!/usr/bin/env python
    
    import numpy as np
    import time
    import matplotlib
    matplotlib.use('GTKAgg')
    from matplotlib import pyplot as plt
    
    
    def randomwalk(dims=(256, 256), n=20, sigma=5, alpha=0.95, seed=1):
        """ A simple random walk with memory """
    
        r, c = dims
        gen = np.random.RandomState(seed)
        pos = gen.rand(2, n) * ((r,), (c,))
        old_delta = gen.randn(2, n) * sigma
    
        while True:
            delta = (1. - alpha) * gen.randn(2, n) * sigma + alpha * old_delta
            pos += delta
            for ii in xrange(n):
                if not (0. <= pos[0, ii] < r):
                    pos[0, ii] = abs(pos[0, ii] % r)
                if not (0. <= pos[1, ii] < c):
                    pos[1, ii] = abs(pos[1, ii] % c)
            old_delta = delta
            yield pos
    
    
    def run(niter=1000, doblit=True):
        """
        Display the simulation using matplotlib, optionally using blit for speed
        """
    
        fig, ax = plt.subplots(1, 1)
        ax.set_aspect('equal')
        ax.set_xlim(0, 255)
        ax.set_ylim(0, 255)
        ax.hold(True)
        rw = randomwalk()
        x, y = rw.next()
    
        plt.show(False)
        plt.draw()
    
        if doblit:
            # cache the background
            background = fig.canvas.copy_from_bbox(ax.bbox)
    
        points = ax.plot(x, y, 'o')[0]
        tic = time.time()
    
        for ii in xrange(niter):
    
            # update the xy data
            x, y = rw.next()
            points.set_data(x, y)
    
            if doblit:
                # restore background
                fig.canvas.restore_region(background)
    
                # redraw just the points
                ax.draw_artist(points)
    
                # fill in the axes rectangle
                fig.canvas.blit(ax.bbox)
    
            else:
                # redraw everything
                fig.canvas.draw()
    
        plt.close(fig)
        print "Blit = %s, average FPS: %.2f" % (
            str(doblit), niter / (time.time() - tic))
    
    if __name__ == '__main__':
        run(doblit=False)
        run(doblit=True)
    

At first I got an error that said Import Error : No module named _backend_gdk.
I searched a lot and tried various methods. Now, I get a different error.

    
    
    Traceback (most recent call last):
      File "testblit.py", line 7, in <module>
        from matplotlib import pyplot as plt
      File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", line 108, in <module>
        _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
      File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/backends/__init__.py", line 32, in pylab_setup
        globals(),locals(),[backend_name],0)
      File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtkagg.py", line 14, in <module>
        from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\
      File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtk.py", line 36, in <module>
        from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK
      File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gdk.py", line 33, in <module>
        from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
    ImportError: /usr/local/lib/python2.7/dist-packages/matplotlib-1.5.dev1-py2.7-linux-x86_64.egg/matplotlib/backends/_backend_gdk.so: undefined symbol: PyArray_SetBaseObject
    

Any help to solve this problem would be appreciated. The code above is for
real time plotting using blit that I found on stackoverflow.


Answer: Should compile with numpy 1.7 or newer, or with 1.6 after applying the fix at
<https://github.com/matplotlib/matplotlib/pull/5080>.

