Virtualenv: Erstellen Sie optional einen Pythonw-Link in virtualenv für Framework-Python-Builds auf osx

Erstellt am 14. März 2011  ·  34Kommentare  ·  Quelle: pypa/virtualenv

http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a?#744e19c194f1618a beschreibt, wie wxpython für Python auf OSX in Virtualenvs analog zu der Art und Weise, wie es derzeit für Win32 funktioniert, aktiviert werden könnte Installationsmodi.

Ians vorherige Diskussion in dieser Richtung ist hier:
http://groups.google.com/group/python-virtualenv/browse_thread/thread/b119a3c26aa49238
und der Code, der dies im Moment tut, ist hier aufgelistet:
http://github.com/gldnspud/virtualenv-pythonw-osx/

Können wir das in die Kernverteilung einbacken? Was müsste sich an der Vorgehensweise ändern?


enhancement

Hilfreichster Kommentar

Versuchen Sie, das Matplotlib-Backend zu ändern, damit matplotlib in einer virtuellen Umgebung funktioniert:

Es gibt (mindestens) zwei Lösungen, die ich verwendet habe, mit einigen zusätzlichen Methoden unten. Beide hier skizzierten sollten mit einem etwas anderen Ansatz zum selben Ziel führen:

Wenn Sie matplotlib bereits mit pip in Ihrer virtuellen Umgebung installiert haben, können Sie...

_1. Fügen Sie eine neue matplotlibrc-Datei für Ihre virtuelle Umgebung hinzu_
Führen Sie beispielsweise in Ihrer virtuellen Umgebung Folgendes aus:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Schreiben Sie backend: TkAgg in die Datei und speichern Sie beim Beenden. Sie sollten gut gehen.

_ODER _

_2. Bearbeiten Sie die Datei matplotlibrc, auf die von Ihrer virtuellen Umgebung verwiesen wird_
Öffnen Sie in Ihrer virtuellen Umgebung eine Python-Shell und führen Sie Folgendes aus:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Hinweis/Update: Wenn Sie in Ihrer virtuellen Umgebung einen Syntaxfehler erhalten, müssen Sie möglicherweise einfach Folgendes ausführen:

import matplotlib
matplotlib.matplotlib_fname()

Dadurch wird die Datei matplotlibrc angezeigt, auf die das Paket matplotlib in Ihrer virtuellen Umgebung verweist. Folgen Sie dem Pfad und öffnen Sie die Datei matplotlibrc. Bearbeiten Sie das Tag backend der Datei, um backend: TkAgg und save zu lesen

[ Auch - _Ein dritter Ansatz_]
Ich habe es noch nicht versucht, aber laut Dokumentation sollten Sie in der Lage sein, das Backend beim Importieren von Matplotlib zu definieren, wenn Sie das Backend nicht im Skript selbst ändern möchten:

import matplotlib
matplotlib.use('TkAgg')

(siehe Quellen unten für weitere Erklärungen und zusätzliche Methoden)

Quellen:
[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

Alle 34 Kommentare

Beachten Sie, dass möglicherweise #47 dupliziert, aber das Problem dort ist etwas schlammiger.


Original Comment By: dan mackinlay

+1 dazu.

Was ist das ".Python" -Verzeichnis, das verlinkt werden soll?
http://github.com/gldnspud/virtualenv-pythonw-osx/ ? Ich sehe keine .Python meiner Venv.

Stattdessen sehe ich das:

 (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

Dieser Fehler manifestiert sich auf verschiedene Weise:

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

Der Grund, warum es kein .Python war, dass ich in meiner Anfangszeit an einem brew install python venving war. Nur brew install python --framework und andere Framework-Installationen erhalten die .Python Dynlib.

Eine Lösung dafür in Sicht? Ich habe immer noch das Problem mit den schüchternen Matplotlib-Fenstern

Dieses Problem ist 4,5 Jahre alt und erfordert hässliche Hacks, damit Matplotlib unter Mac OSX läuft . Können wir das bitte beheben?

Ich unterstütze das. Ich habe Python 2.7 installiert und dann virtualenv mit den folgenden Befehlen erstellt:

brew install python --framework
virtualenv env
source env/bin/activate
pip install matplotlib

Aber ich erhalte folgende Meldung, wenn ich versuche, matplotlib.pyplot zu importieren.

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

Von @nils-werner erwähnte Problemumgehung funktioniert. Aber es ist ein riesiger Blocker für Anfänger, die mit Matplotlib (nicht nur) in Jupyter Notebook in Virtualenv arbeiten möchten.

Ich habe eine detaillierte Anleitung zur Umgehung dieses Problems geschrieben, http://blog.rousek.name/2015/11/29/adventure-with-matplotlib-virtualenv-and-macosx/

Ugh....... Ich habe das auch gerade getroffen, nach einem Upgrade auf Matplotlib 1.5 (das jetzt kein Backend importieren kann, wie oben von @stlk dokumentiert). Ich verwende ein brew installiertes Python 3.5.

Ich habe eine Einführung in die Visualisierung mit dem Python-Kapitel durchgesehen und kann nicht einmal mit dem Schreiben des ersten Codebeispiels in Jupyter beginnen, da ich auf einem Mac immer wieder auf dieses Problem stoße ... Ich verwende das Systempython, das mit mac + virtualenv geliefert wird .

+1

+1
Oh Gott....
Problem von 2011.. immer noch nicht behoben .

In der Zwischenzeit hat das in dieser Ausgabe (und in den FAQ) verlinkte Dienstprogramm bei mir noch funktioniert:

$ # 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`/../..

Ja, es ist ganz einfach, aber ich habe eine Weile gebraucht, um es herauszufinden. Ich habe keine Ahnung, was das bewirkt, aber als Ergebnis funktioniert Matplotlib, indem es einfach mit dieser venv Python-Binärdatei aufgerufen wird – keine Wrapper-Shell-Funktion erforderlich.

Ich kenne diese Lösung, aber:

  • Sie müssen es für alle Ihre virtuellen Umgebungen wiederholen (und sich daran erinnern, wie es geht).
  • Es macht es unmöglich, bestimmte externe Module zu bauen oder wenn CFFI oder ähnliches verwendet wird (muss nachsehen, was es genau war)

Es fühlt sich nicht nach einer idealen Lösung an, aber eine einfache Problemumgehung besteht darin, postactivate :

if [ ! -d $VIRTUAL_ENV/Python.app ]; then
  echo Fixing OSX Python display issues...
  fix-osx-virtualenv $VIRTUAL_ENV
fi

Dadurch wird jede virtuelle Umgebung automatisch repariert, wenn Sie sie über den Befehl workon aktivieren

+1

+1

+1

Habe auch gerade diesen Bug getroffen. Die vorgeschlagene Problemumgehung ist nicht gerade elegant. Wäre super wenn es repariert wird!

Versuchen Sie, das Matplotlib-Backend zu ändern, damit matplotlib in einer virtuellen Umgebung funktioniert:

Es gibt (mindestens) zwei Lösungen, die ich verwendet habe, mit einigen zusätzlichen Methoden unten. Beide hier skizzierten sollten mit einem etwas anderen Ansatz zum selben Ziel führen:

Wenn Sie matplotlib bereits mit pip in Ihrer virtuellen Umgebung installiert haben, können Sie...

_1. Fügen Sie eine neue matplotlibrc-Datei für Ihre virtuelle Umgebung hinzu_
Führen Sie beispielsweise in Ihrer virtuellen Umgebung Folgendes aus:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Schreiben Sie backend: TkAgg in die Datei und speichern Sie beim Beenden. Sie sollten gut gehen.

_ODER _

_2. Bearbeiten Sie die Datei matplotlibrc, auf die von Ihrer virtuellen Umgebung verwiesen wird_
Öffnen Sie in Ihrer virtuellen Umgebung eine Python-Shell und führen Sie Folgendes aus:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Hinweis/Update: Wenn Sie in Ihrer virtuellen Umgebung einen Syntaxfehler erhalten, müssen Sie möglicherweise einfach Folgendes ausführen:

import matplotlib
matplotlib.matplotlib_fname()

Dadurch wird die Datei matplotlibrc angezeigt, auf die das Paket matplotlib in Ihrer virtuellen Umgebung verweist. Folgen Sie dem Pfad und öffnen Sie die Datei matplotlibrc. Bearbeiten Sie das Tag backend der Datei, um backend: TkAgg und save zu lesen

[ Auch - _Ein dritter Ansatz_]
Ich habe es noch nicht versucht, aber laut Dokumentation sollten Sie in der Lage sein, das Backend beim Importieren von Matplotlib zu definieren, wenn Sie das Backend nicht im Skript selbst ändern möchten:

import matplotlib
matplotlib.use('TkAgg')

(siehe Quellen unten für weitere Erklärungen und zusätzliche Methoden)

Quellen:
[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 Toller

import matplotlib
matplotlib.use('TkAgg')

Arbeiten an der Verbesserung der Matplotlib-Dokumentation für dieses Problem @stlk alle Einwände gegen die Verwendung eines Teils Ihres Handbuchs zur Behebung des Jupyter-Notebook-Problems (Wir haben bereits das Terminal python/ipython behandelt)

@jenshnielsen Fühlen Sie sich frei, es zu verwenden, ich freue mich, dass es hilfreich ist.

+1

Ist das gelöst? Wenn ja, kann jemand das Thema schließen?

Es ist nicht

Absolut nicht. Es ist schlimmer als je zuvor, da es auf import abstürzt. Schritte zum Reproduzieren

virtualenv test
source test/bin/activate
pip install matplotlib
python -c "import matplotlib.pyplot; print 'import succeeded'"

Gibt es eine PR, die das behebt? Wenn ja, haben die Personen, die auf das Problem gestoßen sind, es getestet und bestätigt, dass es das Problem behebt? Wenn nicht, arbeitet jemand an einem? Es wird für jeden, der das Problem nicht reproduzieren kann (was zumindest eine OSX-Installation erfordert, mehr oder weniger unmöglich sein), einen Fix zu entwickeln, daher sind wir hier auf Beiträge angewiesen.

@nils-werner danke für die klare Beschreibung der Reproduktion. Wenn Sie Umgebungsdetails hinzufügen könnten (alles, was ich im Thread sehe, ist "OSX", aber nichts spezifisches darüber, ob es alle Versionen sind, welche Version von virtualenv und python und wie sie installiert wurden, ob bestimmte andere Dinge installiert werden müssen, wie es geht installieren usw.), das wäre auch hilfreich.

Dann kann hoffentlich jemand mit Zugang zu einem geeigneten Umfeld eine PR erstellen und hier darauf verweisen. In diesem Stadium können wir die PR überprüfen und von dort aus übernehmen.

@pfmoore Ich habe die Problemumgehung in meinem früheren Kommentar verwendet , die bei mir immer noch konsequent funktioniert. – Obwohl ich mir nicht sicher bin, _wie_ das funktioniert. Siehe auch den folgenden Kommentar von @nils-werner.

(Für das Protokoll: OS X 10.11.6, Python 3.5.2, matplotlib-1.5.3.)

@nils-werner Der einzige Grund, warum es noch schlimmer ist, dass wir explizit nach einem Framework-Build suchen, bevor wir das OSX-Backend in Matplotlib ausführen https://github.com/matplotlib/matplotlib/blob/master/src/_macosx.m#L3071

Die Alternative ist ein weicher Fehler, bei dem die GUI nur teilweise funktioniert.

WXPython verfügt über einen ähnlichen Check-Build, der verhindert, dass Sie WXPython aus einem Nicht-Framework-Build verwenden.

Die beste Problemumgehung besteht darin, venv aus der Standardbibliothek zu verwenden, wenn Sie Python3 verwenden
Im Gegensatz zu virtualenv funktioniert das richtig.
http://matplotlib.org/devdocs/faq/osx_framework.html#introduction

OK, also denke ich, wenn niemand an einer PR arbeitet, ist die Auflösung hier entweder:

  1. Wenn Sie Python 3 verwenden, verwenden Sie stdlib venv
  2. Verwenden Sie andernfalls die notierte Problemumgehung.

Cool. Ich bin mir nicht sicher, ob es sich in diesem Fall lohnt, das Problem offen zu lassen - es gibt eine klare Problemumgehung, und jede Codekorrektur wäre sowieso ein neuer PR. Ich schlage vor, wir schließen das Thema - Kommentare?

Irgendwelche Updates dazu? Es wäre schön, dies behoben zu haben, anstatt Problemumgehungen verwenden zu müssen.

@wwp3 Super , danke! Ich habe es erfolgreich mit dieser Option behoben:

  1. Fügen Sie eine neue matplotlibrc-Datei für Ihre virtuelle Umgebung hinzu
    Führen Sie beispielsweise in Ihrer virtuellen Umgebung Folgendes aus:

$ cd ~/.matplotlib
$ nano matplotlibrc #um eine Datei mit nano zu erstellen
Backend: TkAgg in die Datei schreiben und beim Beenden speichern. Sie sollten gut gehen.

@stlk das war hilfreich danke

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Fügen Sie einfach einen Kommentar hinzu, wenn Sie ihn offen halten möchten. Vielen Dank für Ihre Beiträge.

Versuchen Sie, das Matplotlib-Backend zu ändern, damit matplotlib in einer virtuellen Umgebung funktioniert:

Es gibt (mindestens) zwei Lösungen, die ich verwendet habe, mit einigen zusätzlichen Methoden unten. Beide hier skizzierten sollten mit einem etwas anderen Ansatz zum selben Ziel führen:

Wenn Sie matplotlib bereits mit pip in Ihrer virtuellen Umgebung installiert haben, können Sie...

_1. Fügen Sie eine neue matplotlibrc-Datei für Ihre virtuelle Umgebung hinzu_
Führen Sie beispielsweise in Ihrer virtuellen Umgebung Folgendes aus:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Schreiben Sie backend: TkAgg in die Datei und speichern Sie beim Beenden. Sie sollten gut gehen.

_ _ODER __

_2. Bearbeiten Sie die Datei matplotlibrc, auf die von Ihrer virtuellen Umgebung verwiesen wird_
Öffnen Sie in Ihrer virtuellen Umgebung eine Python-Shell und führen Sie Folgendes aus:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Hinweis/Update: Wenn Sie in Ihrer virtuellen Umgebung einen Syntaxfehler erhalten, müssen Sie möglicherweise einfach Folgendes ausführen:

import matplotlib
matplotlib.matplotlib_fname()

Dadurch wird die Datei matplotlibrc angezeigt, auf die das Paket matplotlib in Ihrer virtuellen Umgebung verweist. Folgen Sie dem Pfad und öffnen Sie die Datei matplotlibrc. Bearbeiten Sie das Tag backend der Datei, um backend: TkAgg und save zu lesen

[ Auch - _Ein dritter Ansatz_]
Ich habe es noch nicht versucht, aber laut Dokumentation sollten Sie in der Lage sein, das Backend beim Importieren von Matplotlib zu definieren, wenn Sie das Backend nicht im Skript selbst ändern möchten:

import matplotlib
matplotlib.use('TkAgg')

(siehe Quellen unten für weitere Erklärungen und zusätzliche Methoden)

Quellen:
[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

Deine erste Lösung ist so toll und habe mein Problem gelöst. Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen