2015-04-03 8 views
59

Pracuję z kolbą w środowisku wirtualnym. Mogłem zainstalować matplotlib z pip i mogę import matplotlib w sesji Pythona. Jednak, kiedy importować go jakoNie można "zaimportować matplotlib.pyplot jako plt" w virtualenv

matplotlib.pyplot as plt 

pojawia się następujący błąd:

>>> import matplotlib.pyplot as plt 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 109, in <module> 
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() 
    File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup 
    globals(),locals(),[backend_name],0) 
    File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 24, in <module> 
    from matplotlib.backends import _macosx 
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. 

Jestem mylić o tym, dlaczego prosi mnie aby zainstalować Pythona jako ramy. Czy to już nie istnieje? Co to znaczy "zainstalować Pythona jako framework" i jak go zainstalować?

+0

W jakim systemie operacyjnym to robisz? –

+0

To był MacOS. Uważam, że było 10,6. – Rohit

Odpowiedz

135

To dla mnie pracował solution. Jeśli masz już zainstalowany matplotlib użyciu pip na środowisku wirtualnym, można po prostu wpisać:

$ cd ~/.matplotlib 
$ nano matplotlibrc 

A potem napisać backend: TkAgg tam. Jeśli potrzebujesz więcej informacji, po prostu przejdź do linku rozwiązania.

+0

Ładne i łatwe. Wielkie dzięki! –

+33

One-liner: backend "echo": TkAgg "> ~/.matplotlib/matplotlibrc' lub" echo "backend: Agg"> ~/.matplotlib/matplotlibrc' – msanford

+0

działa cudownie dzięki – Oliver

13

Miałem podobny problem, gdy użyłem pip, aby zainstalować matplotlib. Domyślnie zainstalowano najnowszą wersję 1.5.0. Miałem jednak inne wirtualne środowisko z Pythonem 3.4 i matplotlib 1.4.3, a to środowisko działało dobrze, gdy zaimportowałem matplotlib.pyplot. Dlatego zainstalowałem wcześniejszą wersję matplotlib przy użyciu następujących:

cd path_to_virtual_environment # assume directory is called env3 
env3/bin/pip install matplotlib==1.4.3 

wiem, że to tylko obejście, ale dla mnie jako poprawka krótkoterminowego.

+0

To działało ładnie dla mnie. Dzięki. – Ankur

+0

Dzięki! Podoba mi się ta odpowiedź! – Hanfeng

+0

Dla mnie miałem środowiska Pythona 2.7 pyenv z matplotlib == 2.1.0 i Pythona 3.6 z matplotlib == 2.1.1. Uaktualniłem matplotlib 2.7 do 2.1.1 i problem został naprawiony. – bajafresh4life

0

Chociaż większość odpowiedzi wydaje się wskazywać na poprawianie skryptu activate, aby użyć pytona systemowego, miałem problemy z uzyskaniem tego do pracy i łatwe rozwiązanie dla mnie - choć trochę cringey - było zainstalowanie matplotlib w środowisku globalnym i używaj tego zamiast instancji virtualenv. Możesz to zrobić, tworząc wirtualny plik z flagą -system-site-packages, taką jak virtualenv --system-site-packages foo, lub używając flagi uniwersalnej podczas instalacji pip, jak pip install -U matplotlib.

4

Można rozwiązać ten problem za pomocą backendu Agg

Go do User/yourname/.matplotlib i otwarty/Utwórz matplotlibrc i dodaj następującą linię backend : Agg i powinny pracować dla Ciebie.

27

Mam ten sam błąd i próbował Jonathan 's odpowiedź:

You can fix this issue by using the backend Agg

Go to User/yourname/.matplotlib and open/create matplotlibrc and add the following line backend : Agg and it should work for you.

uruchomić program, nie błąd, ale również nie ma działki, a ja starałem backend: Qt4Agg, drukuje się, że raj' t ma zainstalowany PyQt4.

Potem spróbowałem innego backendu: backend: TkAgg, działa!

Więc może możemy wypróbować backendy różnicowe, a niektóre mogą pracować lub instalować wymagane pakiety, takie jak PyQt4.

Oto przykładowy fragment pythona, który można wypróbować i przetestować matplotlib.

import matplotlib 

matplotlib.use('TkAgg') 
import matplotlib.pyplot as plt 

plt.plot([1, 2, 3], [0, 3, 7]) 
plt.show() 
+0

Używam macOS high sierra, Kiedy używam TkAgg, to pokazuje, że nie mam zainstalowanego pakietu tkinter. Kiedy używam Qt4Agg lub Qt5Agg, pokazuje to, że nie mam zainstalowanego PyQt. To nie pomoże, jeśli zainstaluję PyQt używając 'brew install pyqt'. Koniec końców, muszę zainstalować go w virtualenv "aktywuj virtualenv, następnie' pip install PyQt5'. To działa. – nngeek

6

Jeśli nie chcesz, aby ustawić plik .matplotib/matplotlibrc konfiguracji, można obejść ten problem przez ustawienie backend w czasie wykonywania 'Agg' zaraz po imporcie matplotlib i przed importem matplotlib.pyplot:

In [1]: import matplotlib 

In [2]: matplotlib.use('Agg') 

In [3]: import matplotlib.pyplot as plt 

In [4]: fig, ax = plt.subplots(1, 1) 

In [5]: import numpy as np 

In [6]: x = np.linspace(-1., 1.) 

In [7]: y = np.sin(x) 

In [8]: ax.plot(x, y) 
Out[8]: [<matplotlib.lines.Line2D at 0x1057ecf10>] 

In [9=]: fig.savefig('myplot.png') 

enter image description here

0

czyste i łatwe rozwiązanie polega na utworzeniu jądra, które ustawia PYTHONHOME na "VIRTUAL_ENV", a następnie wykorzystuje systemowy plik wykonywalny Python (zamiast tego w virtualenv).

Jeśli chcesz zautomatyzować tworzenie takiego jądra, możesz użyć skryptu jupyter-virtualenv-osx.

Powiązane problemy