http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a?#744e19c194f1618a détaille comment wxpython pourrait être activé pour python sur OSX dans virtualenvs par analogie avec la façon dont il fonctionne actuellement pour win32 et python modes d'installation.
La discussion précédente d'Ian dans ce sens est ici :
http://groups.google.com/group/python-virtualenv/browse_thread/thread/b119a3c26aa49238
et le code qui le fait pour le moment est listé ici :
http://github.com/gldnspud/virtualenv-pythonw-osx/
Pouvons-nous intégrer cela dans la distribution principale ? Qu'est-ce qui devrait changer dans l'approche?
note, peut-être en double #47 , mais le problème y est un peu plus boueux.
Original Comment By: dan mackinlay
+1 à ce sujet.
Quel est le répertoire ".Python" qui veut lier dans
http://github.com/gldnspud/virtualenv-pythonw-osx/ ? Je ne vois aucun .Python
mon venv.
A la place, je vois ceci :
(py27) $ laf /Users/glind/venvs/py27//include/python2.7
/Users/glind/venvs/py27//include/python2.7@ -> /usr/local/Cellar/python/2.7.2/include/python2.7
(py27) $ which python
/Users/glind/venvs/py27/bin/python
Ce bogue se manifeste de différentes manières :
http://stackoverflow.com/questions/3692928/why-doesnt-the-save-button-work-on-a-matplotlib-plot
http://code.google.com/p/iterm2/issues/detail?id=1680
La raison pour laquelle il n'y avait pas de .Python
était parce que dans mon premier j'étais en train de venger d'un brew install python
. Seules brew install python --framework
et les autres installations de Framework obtiennent le .Python
dynlib.
Un correctif pour cela en vue? J'ai toujours le problème avec les timides fenêtres Matplotlib
Ce problème date de 4,5 ans et nécessite de vilains hacks pour que matplotlib s'exécute sur Mac OSX . Pouvons-nous s'il vous plaît corriger cela?
Je seconde ceci. J'ai installé python 2.7 puis créé virtualenv à l'aide des commandes suivantes :
brew install python --framework
virtualenv env
source env/bin/activate
pip install matplotlib
Mais je reçois le message suivant lorsque j'essaie d'importer matplotlib.pyplot
.
Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
>>> import matplotlib.pyplot as plt
...
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. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ
La solution de contournement mentionnée par @nils-werner fonctionne. Mais son énorme bloqueur pour les débutants qui veulent travailler avec matplotlib (pas seulement) dans jupyter notebook dans virtualenv.
J'ai écrit un guide détaillé sur la façon de contourner ce problème, http://blog.rousek.name/2015/11/29/adventure-with-matplotlib-virtualenv-and-macosx/
Ugh ........ Je viens de le frapper aussi, suite à une mise à niveau vers matplotlib 1.5 (qui ne parvient plus à importer un backend, comme documenté ci-dessus par @stlk). J'utilise un python installé 3.5.
Je passais par une introduction à la visualisation à l'aide du chapitre python, et je ne peux même pas commencer à écrire le premier échantillon de code dans jupyter car je continue à rencontrer ce problème sur un mac... J'utilise le système python fourni avec mac + virtualenv .
+1
+1
Oh mon Dieu....
problème de 2011.. toujours pas résolu .
En attendant, l'utilitaire lié dans ce numéro (et sur la FAQ) fonctionnait toujours pour moi :
$ # install the utility
$ pip install git+https://github.com/gldnspud/virtualenv-pythonw-osx.git
$ # enter the virtualenv with virtualenvwrapper (or manually)
$ workon my-venv
$ # double-check that this is your venv Python binary
$ which python
/Users/macbook/.virtualenvs/my-venv/bin/python
$ # fix it, using magic
$ fix-osx-virtualenv `which python`/../..
Oui, c'est assez simple, mais j'ai mis du temps à comprendre. Je n'ai aucune idée de ce que cela fait, mais par conséquent, Matplotlib fonctionne simplement en l'invoquant à l'aide de ce binaire Python venv - pas besoin d'une fonction shell wrapper.
Je connais cette solution mais :
Cela ne semble pas être une solution idéale, mais une solution de contournement simple consiste à utiliser virtualenvwrapper , puis à utiliser les crochets pour configurer les choses. Installez virtualenv-pythonw-osx et virtualevnwrapper, sourcez le fichier virtualenvwrapper.sh afin de créer les scripts hook, puis ajoutez ce qui suit au script postactivate
:
if [ ! -d $VIRTUAL_ENV/Python.app ]; then
echo Fixing OSX Python display issues...
fix-osx-virtualenv $VIRTUAL_ENV
fi
Cela corrigera automatiquement tout environnement virtuel lorsque vous l'activerez via la commande workon
+1
+1
+1
Frappez juste ce bug, aussi. La solution de contournement suggérée n'est pas exactement élégante. Ce serait bien d'être réparé !
Essayez de changer le backend matplotlib pour que matplotlib fonctionne dans un environnement virtuel :
Il y a (au moins) deux solutions que j'ai utilisées, avec quelques méthodes supplémentaires incluses ci-dessous. Les deux décrits ici devraient correspondre à la même chose avec une approche légèrement différente :
Si vous avez déjà installé matplotlib en utilisant pip sur votre environnement virtuel, vous pouvez...
_1. Ajoutez un nouveau fichier matplotlibrc pour votre environnement virtuel_
Par exemple, dans votre environnement virtuel, exécutez :
$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano
Écrivez backend: TkAgg
dans le fichier et enregistrez à la sortie. Vous devriez être prêt à partir.
_OU _
_2. Modifiez le fichier matplotlibrc référencé par votre environnement virtuel_
Dans votre environnement virtuel, ouvrez un shell python et exécutez :
import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'
Remarque/Mise à jour : si vous obtenez une erreur de syntaxe dans votre environnement virtuel, vous devrez peut-être simplement exécuter :
import matplotlib
matplotlib.matplotlib_fname()
Cela affiche le fichier matplotlibrc référencé par le package matplotlib dans votre environnement virtuel. Suivez le chemin et ouvrez le fichier matplotlibrc. Modifiez la balise backend
du fichier pour lire backend: TkAgg
et save
[ Aussi - _Une troisième approche_]
Je n'ai pas essayé auparavant, mais selon la documentation, vous devriez pouvoir définir le backend lors de l'importation de matplotlib si vous ne voulez pas changer le backend dans le script lui-même :
import matplotlib
matplotlib.use('TkAgg')
(voir les sources ci-dessous pour plus d'explications et des méthodes supplémentaires)
Sources:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing-matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv
@wwp3 Super article, merci ! J'ai eu de la chance avec cette option:
import matplotlib
matplotlib.use('TkAgg')
Travailler sur l'amélioration de la documentation Matplotlib pour ce problème @stlk toute objection à l'utilisation d'une partie de votre guide pour le correctif du problème du bloc-notes Jupyter (nous avons déjà couvert le terminal python/ipython)
@jenshnielsen N'hésitez pas à l'utiliser, je suis heureux que cela soit utile.
+1
Est-ce que c'est résolu ? Si oui, quelqu'un peut-il clore le problème ?
Ce n'est pas
Absolument pas. C'est pire que jamais car il plante sur import
. Étapes à reproduire
virtualenv test
source test/bin/activate
pip install matplotlib
python -c "import matplotlib.pyplot; print 'import succeeded'"
Y a-t-il un PR qui corrige cela? Si oui, les personnes rencontrant le problème l'ont-elles testé et ont-elles confirmé qu'elle résout le problème ? S'il n'y en a pas, est-ce que quelqu'un travaille dessus ? Il sera plus ou moins impossible pour quiconque ne peut pas reproduire le problème (ce qui nécessite, je suppose, une installation d'OSX au minimum pour le faire) de développer un correctif, nous comptons donc sur les contributions ici.
@nils-werner merci pour la description claire de la façon de reproduire. Si vous pouviez ajouter des détails sur l'environnement (tout ce que je vois dans le fil est "OSX", mais rien de spécifique pour savoir s'il s'agit de toutes les versions, quelle version de virtualenv et de python et comment ils ont été installés, si certaines autres choses doivent être installées, comment les installer, etc.) qui serait également utile.
Ensuite, j'espère que quelqu'un ayant accès à un environnement approprié pourra produire un PR et le référencer ici. À ce stade, nous pouvons examiner le PR et partir de là.
@pfmoore J'ai utilisé la solution de contournement dans mon commentaire précédent , qui fonctionne toujours pour moi. – Bien que je ne sois pas sûr du _comment_ cela fonctionne. Voir aussi le commentaire suivant de @nils-werner.
(Pour mémoire : OS X 10.11.6, Python 3.5.2, matplotlib-1.5.3.)
@nils-werner La seule raison pour laquelle c'est pire, c'est que nous vérifions explicitement la construction d'un framework avant d'exécuter le backend OSX dans Matplotlib https://github.com/matplotlib/matplotlib/blob/master/src/_macosx.m#L3071
L'alternative est une défaillance logicielle où l'interface graphique n'est que partiellement fonctionnelle.
WXPython a une version de vérification similaire qui vous empêche d'utiliser WXPython à partir d'une version non-framework.
La meilleure solution consiste à utiliser venv de la bibliothèque standard si vous utilisez python3
Contrairement à virtualenv qui fonctionne correctement.
http://matplotlib.org/devdocs/faq/osx_framework.html#introduction
OK, donc je suppose que si personne ne travaille sur un PR, la résolution ici est soit :
venv
Frais. Je ne sais pas si cela vaut la peine de laisser le problème ouvert dans ce cas - il existe une solution de contournement claire, et toute correction de code serait de toute façon un nouveau PR. Je suggère que nous fermions le sujet - des commentaires ?
Des mises à jour à ce sujet ? Ce serait bien de régler ce problème au lieu d'avoir à utiliser des solutions de contournement.
@wwp3 Super, merci ! Je l'ai corrigé avec succès avec cette option:
$ cd ~/.matplotlib
$ nano matplotlibrc #pour créer un fichier avec nano
Écrivez le backend : TkAgg dans le fichier et enregistrez-le en quittant. Vous devriez être prêt à partir.
@stlk qui a été utile merci
Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Ajoutez simplement un commentaire si vous voulez le garder ouvert. Merci pour vos contributions.
Essayez de changer le backend matplotlib pour que matplotlib fonctionne dans un environnement virtuel :
Il y a (au moins) deux solutions que j'ai utilisées, avec quelques méthodes supplémentaires incluses ci-dessous. Les deux décrits ici devraient correspondre à la même chose avec une approche légèrement différente :
Si vous avez déjà installé matplotlib en utilisant pip sur votre environnement virtuel, vous pouvez...
_1. Ajoutez un nouveau fichier matplotlibrc pour votre environnement virtuel_
Par exemple, dans votre environnement virtuel, exécutez :$ cd ~/.matplotlib $ nano matplotlibrc #to create file using nano
Écrivez
backend: TkAgg
dans le fichier et enregistrez à la sortie. Vous devriez être prêt à partir._ _OU __
_2. Modifiez le fichier matplotlibrc référencé par votre environnement virtuel_
Dans votre environnement virtuel, ouvrez un shell python et exécutez :import matplotlib matplotlib.matplotlib_fname() '/home/foo/.config/matplotlib/matplotlibrc'
Remarque/Mise à jour : si vous obtenez une erreur de syntaxe dans votre environnement virtuel, vous devrez peut-être simplement exécuter :
import matplotlib matplotlib.matplotlib_fname()
Cela affiche le fichier matplotlibrc référencé par le package matplotlib dans votre environnement virtuel. Suivez le chemin et ouvrez le fichier matplotlibrc. Modifiez la balise
backend
du fichier pour lirebackend: TkAgg
etsave
[ Aussi - _Une troisième approche_]
Je n'ai pas essayé auparavant, mais selon la documentation, vous devriez pouvoir définir le backend lors de l'importation de matplotlib si vous ne voulez pas changer le backend dans le script lui-même :import matplotlib matplotlib.use('TkAgg')
(voir les sources ci-dessous pour plus d'explications et des méthodes supplémentaires)
Sources:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing-matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv
Votre première solution est tellement géniale et a résolu mon problème. THX!
Commentaire le plus utile
Essayez de changer le backend matplotlib pour que matplotlib fonctionne dans un environnement virtuel :
Il y a (au moins) deux solutions que j'ai utilisées, avec quelques méthodes supplémentaires incluses ci-dessous. Les deux décrits ici devraient correspondre à la même chose avec une approche légèrement différente :
Si vous avez déjà installé matplotlib en utilisant pip sur votre environnement virtuel, vous pouvez...
_1. Ajoutez un nouveau fichier matplotlibrc pour votre environnement virtuel_
Par exemple, dans votre environnement virtuel, exécutez :
Écrivez
backend: TkAgg
dans le fichier et enregistrez à la sortie. Vous devriez être prêt à partir._OU _
_2. Modifiez le fichier matplotlibrc référencé par votre environnement virtuel_
Dans votre environnement virtuel, ouvrez un shell python et exécutez :
Remarque/Mise à jour : si vous obtenez une erreur de syntaxe dans votre environnement virtuel, vous devrez peut-être simplement exécuter :
Cela affiche le fichier matplotlibrc référencé par le package matplotlib dans votre environnement virtuel. Suivez le chemin et ouvrez le fichier matplotlibrc. Modifiez la balise
backend
du fichier pour lirebackend: TkAgg
etsave
[ Aussi - _Une troisième approche_]
Je n'ai pas essayé auparavant, mais selon la documentation, vous devriez pouvoir définir le backend lors de l'importation de matplotlib si vous ne voulez pas changer le backend dans le script lui-même :
(voir les sources ci-dessous pour plus d'explications et des méthodes supplémentaires)
Sources:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing-matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv