2016-08-08 65 views
7

-Update importieren: ipykeynel 4.4.1 dieses Thema am Morgen des 9. AugustFailure matplotlib.pyplot in jupyter (aber nicht IPython)

ich eine Neuinstallation haben gepatcht und ich habe versucht, meine Python-Abhängigkeiten, aufzustehen und Laufen , nämlich Jupyter Notebook und Matplotlib. Ich habe alles installiert und "matplotlib importieren" funktioniert. Wenn ich in einem jupyter Notebook bin, und ich versuche, "Import matplotlib.pyplot" oder "aus matplotlib Import pyplot als plt", erhalte ich:

ImportError        Traceback (most recent call last) 
... 
/usr/local/lib/python2.7/dist-packages/IPython/core/pylabtools.pyc in configure_inline_support(shell, backend) 
    359  except ImportError: 
    360   return 
--> 361  from matplotlib import pyplot 
    362 
    363  cfg = InlineBackend.instance(parent=shell) 

ImportError: cannot import name pyplot 

Full traceback

Allerdings, wenn ich in ipython bin (Befehlszeile), das funktioniert gut. Außerdem können Sie Diagramme von einem Modul über die Befehlszeile ausführen. Ich habe eine Vielzahl von Techniken versucht:

  • Pip Installation/Deinstallation matplotlib, ipython und jupyter in verschiedener Reihenfolge
  • pip Verwendung mit --no-cache-dir und/oder --ignore installierte
  • Löschen von ~/.cache, ~/.ipython und ~/.jupyter
  • sicherzustellen, werden keine Pakete mit apt-get installiert, nur mit pip installiert
  • mit apt-get python-matplotlib, ipython zu installieren, und python-jupyter

Es fühlt sich an, als ob ich irgendeine Art von Pfadinformationen gemangelt habe, aber ich kann nicht herausfinden, was oder wo dies verursachen würde, besonders nach mehrfachem Pip-Deinstallieren/Neuinstallieren und Cache-Löschen. Ich habe jede SO-Frage zum Import von Matplotlib gelesen, keine war hilfreich.

Ich rollte zurück zu Matplotlib 1.4.3, und das hat funktioniert, aber es fehlt ein paar Features, die ich brauche. Mir ist klar, dass dies wahrscheinlich ein heikles Thema ist. Wenn Sie also einen Einblick haben, selbst wenn er unvollständig ist, wäre das sehr zu begrüßen. Auch wenn dies etwas ist, das einen Fehlerbericht verdient (nie einen gemacht, nicht sicher, ob das ein Matplotlib-Problem ist oder nur lokal vermasselt ist), kommentiere als solcher und ich werde einen einreichen. Vielen Dank!

Systeminfo:

Linux Mint 18 "Sarah" 
Python==2.7.12 
ipykernel==4.4.0 
ipython==5.0.0 
ipython-genutils==0.1.0 
ipywidgets==5.2.2 
jupyter==1.0.0 
jupyter-client==4.3.0 
jupyter-console==5.0.0 
jupyter-core==4.1.0 
notebook==4.2.2 
numpy==1.11.1 
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7) 

Ausgabe von sys.path in ipython und jupyter (für beide gleich):

['', 
'/usr/local/bin', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 
'/usr/local/lib/python2.7/dist-packages/IPython/extensions', 
'/home/mm/.ipython'] 
+3

Lustig, lief in dieser Ausgabe heute Morgen, Ihre Frage ist das einzige direkt relevante Google-Suchergebnis. Es scheint, dass bei einer Kombination von Paketversionen das Initialisieren des "Inline" -Backends zu einem kreisförmigen Import von "matplotlib.pyplot" führt. Deshalb ist in Python- und IPython-Shells alles in Ordnung (sie verwenden das Standard-System-Backend). –

+0

@IgorRaush Ich habe gerade erst von den Backend-Funktionen erfahren, nachdem ich die Nase voll hatte und zu Ipy3 wechselte (was nur 5 Zeilen in meiner Bibliothek änderte, yay __future__!) Und entdeckte, dass es standardmäßig inline ist. Ich mag den interaktiven Zoom die meiste Zeit. Der Versuch, Qt5 zum Laufen zu bringen, ist ein weiterer Eimer von _fun_. Python Pro Tipp: Überprüfen Sie das Backend in Ipy mit 'matplotlib.get_backend()' – DeusXMachina

Antwort

5

Ich habe das gleiche Problem, und das Problem vielleicht durch ipykernel hergestellt. nachdem ich die ipykernel-Version auf 4.3.1 zurückgesetzt habe. das Problem ist gelöst.

genau wie @Igor Raush sagte, es sieht aus wie import circular von matplotlib.pyplot.

+0

Aha! Das hat es behoben! Ich denke, es ist in der Tat ein Fehler. Ich werde das einreichen. – DeusXMachina

1

As mentioned here, mit der magischen Linie %matplotlib kann ich das plot-in-new-window-Backend verwenden (Qt4Agg in meinem Fall). Ich wusste nicht, dass Sie %matplotlib von selbst verwenden könnten, ohne ein Argument. Obwohl ein Update auf ipykernel 4.4.1 dieses Problem behebt, dachte ich, dass der Zaubertrick ziemlich clever wäre und in der Zukunft vielleicht andere Importraritäten aufklären könnte.