[PYTHON] Legen Sie die erforderlichen Umgebungsvariablen für PySide (Qt4) und PyQt (Qt5) fest.

Um sowohl Qt4 / Qt5 als auch PySide (Qt4-kompatibel, Qt5-kompatibel) / PyQt (Qt5-kompatibel) zu erreichen, war es notwendig, ein wenig um die Umgebungsvariablen herum zu entwickeln.

Voraussetzung Umgebung

Installation von Qt4 / Qt5

Installieren Sie über Homebrew.

Qt4/Installieren Sie Qt5(Homebrew)


$ brew install qt
$ brew install qt5

Installieren Sie PySide

Da PySide über pip installiert werden kann, installieren Sie es unter virtualenv.

Installieren Sie PySide(pip)


$ mkvirtualenv -p python3 pyside
(pyside)$ mkvirtualenv 
(pyside)$ pip install PySide

Installieren Sie PyQt

Ich habe auch versucht, PyQt über pip zu installieren, konnte es jedoch nicht installieren, da es bereits gelöscht wurde.

Installieren Sie PyQt(Fehlgeschlagen mit pip)


$ mkvirtualenv -p python3 pyqt
(pyqt)$ pip install PyQt5
Downloading/unpacking PyQt5
  Could not find any downloads that satisfy the requirement PyQt5
Cleaning up...
No distributions at all found for PyQt5
Storing debug log for failure in /Users/FGtatsuro/.pip/pip.log

Daher habe ich mich entschieden, PyQt über Homebrew zu installieren. Informationen zu Problemen während der Installation finden Sie unter hier. PyQt selbst wurde über Homebrew installiert. Wenn Sie jedoch verwandte Bibliotheken installieren möchten, erstellen Sie eine virtuelle Umgebung wie PySide.

Installieren Sie PyQt(Homebrew)


(pyqt)$ brew install pyqt5

Führen Sie PySide aus

Ich habe versucht, das PySide-Beispiel unter hier auszuführen, aber es konnte die dynamische Bibliothek nicht laden und konnte nicht ausgeführt werden.

Führen Sie PySide aus(Fehler)


(pyside)$ python pyside_test.py
Traceback (most recent call last):
  File "pyside_test.py", line 6, in <module>
    from PySide.QtCore import *
ImportError: dlopen(/Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide/QtCore.so, 2): Library not loaded: libpyside.cpython-34m.1.2.dylib
  Referenced from: /Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide/QtCore.so
  Reason: image not found

Die dynamische Bibliothek, die Sie laden möchten, befindet sich in virtualenv unter site-package. Sie kann ausgeführt werden, indem der Pfad zur Umgebungsvariablen "DYLD_LIBRARY_PATH" hinzugefügt wird.

Führen Sie PySide aus(Erfolg)


(pyside)$ ls /Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide/libpyside.cpython-34m.1.2.dylib
/Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide/libpyside.cpython-34m.1.2.dylib
(pyside)$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide
(pyside)$ python pyside_test.py

Führen Sie PyQt aus

Ich habe versucht, das PyQt-Beispiel unter hier auszuführen, aber das PyQt-Modul kann nicht geladen werden.

Führen Sie PyQt aus(Fehler)


(pyqt)$ python pyqt_test.py
Traceback (most recent call last):
  File "pyqt_test.py", line 4, in <module>
    from PyQt5.QtCore import *
ImportError: No module named 'PyQt5'

Die Ursache ist, dass das über Homebrew installierte Site-Paket von PyQt (sip, von dem + PyQt abhängt) in der virtualenv-Umgebung nicht sichtbar ist. Sie kann ausgeführt werden, indem der Pfad zur Umgebungsvariablen "PYTHONPATH" hinzugefügt wird.

Führen Sie PyQt aus(Erfolg)


(pyqt)$ export PYTHONPATH=$PYTHONPATH:/usr/local/opt/pyqt5/lib/python3.4/site-packages:/usr/local/opt/sip/lib/python3.4/site-packages
(pyqt)$ python pyqt_test.py

Umgebungsvariablen wechseln

Bis zu diesem Zeitpunkt wurde PySide / PyQt ausgeführt, aber es gibt immer noch Probleme, wenn diese koexistieren. Wenn sowohl "DYLD_LIBRARY_PATH" für PySide als auch "PYTHONPATH" für die Ausführung von PyQt erforderlich sind, schlägt die PyQt-Ausführung fehl. (Probleme beim Laden der Bibliothek?)

Fehler bei der Ausführung von PyQt aufgrund einer Umgebungsvariablen


(pyqt)$ env | egrep 'DYLD_LIBRARY_PATH|PYTHONPATH'
DYLD_LIBRARY_PATH=/Users/FGtatsuro/.homesick/repos/dotfiles/home/.virtualenvs/pyside/lib/python3.4/site-packages/PySide
PYTHONPATH=/usr/local/opt/pyqt5/lib/python3.4/site-packages:/usr/local/opt/sip/lib/python3.4/site-packages

(pyqt)$ python pyqt_test.py
Traceback (most recent call last):
  File "pyqt_test.py", line 5, in <module>
    from PyQt5.QtWidgets import *
RuntimeError: the PyQt5.QtCore module failed to register with the sip module

Es kann ausgeführt werden, indem DYLD_LIBRARY_PATH deaktiviert wird, aber es ist sehr ärgerlich, diese Variable jedes Mal kennen zu müssen, wenn die virtuelle Umgebung umgeschaltet wird.

Daher habe ich die Einstellungsdatei von virtualenvwrapper so geändert, dass die Umgebungsvariablen, die beim Aktivieren / Deaktivieren der virtualenv-Umgebung von PySide / PyQt erforderlich sind, exportiert / deaktiviert werden. .virtualenvs / postactivate wird" nach "enable ausgeführt, und .virtualenvs / predeactivte wird" vor "deactive ausgeführt. Die Beurteilung der PySide-Umgebung hängt von der Pip "unter der virtualenv-Umgebung" ab, und der Zeitpunkt der Beurteilung muss "nach" dem Betreten der virtualenv-Umgebung und "vor" dem Verlassen der virtualenv-Umgebung liegen.

Die Bedingungen für die Beurteilung sind wie folgt.

--PySide: PySide wird mit pip installiert. --PyQt: Der Umgebungsname der virtuellen Umgebung enthält die Zeichenfolge "pyqt".

.virtualenvs/postactivate


#!/bin/bash
# This hook is run after every virtualenv is activated.

#DYLD, wenn PySide mit pip installiert ist_LIBRARY_Fügen Sie Ihrem PFAD den gewünschten Pfad hinzu.
if [ `pip freeze | grep PySide` ]; then
  # Now, I can use PySide on only 3.4.x environment
  VENV_PYSIDE_PATH=$VIRTUAL_ENV/lib/python3.4/site-packages/PySide
  if [ $DYLD_LIBRARY_PATH ]; then
    export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$VENV_PYSIDE_PATH
  else
    export DYLD_LIBRARY_PATH=$VENV_PYSIDE_PATH
  fi
fi

#Der Name der virtualenv-Umgebung lautet"pyqt"Wenn es enthält, fügen Sie den erforderlichen Pfad zu PYTHONPATH hinzu.
if [ `basename $VIRTUAL_ENV | grep pyqt` ]; then
  # Now, I can use PyQt on only 3.4.x environment
  BREW_PYQT_PATH=`brew --prefix pyqt5`/lib/python3.4/site-packages:`brew --prefix sip`/lib/python3.4/site-packages
  if [ $PYTHONPATH ]; then
    export PYTHONPATH=$PYTHONPATH:$BREW_PYQT_PATH
  else
    export PYTHONPATH=$BREW_PYQT_PATH
  fi
fi

.virtualenvs/predeactivate


#!/bin/bash
# This hook is run before every virtualenv is deactivated.

#DYLD, wenn PySide mit pip installiert ist_LIBRARY_Entfernen Sie den entsprechenden Pfad aus dem PFAD.
if [ `pip freeze | grep PySide` ]; then
  # Now, I can use PySide on only 3.4.x environment
  VENV_PYSIDE_PATH=$VIRTUAL_ENV/lib/python3.4/site-packages/PySide
  export DYLD_LIBRARY_PATH=`echo $DYLD_LIBRARY_PATH | sed -e "s|:*$VENV_PYSIDE_PATH||g"`
  if [ -z $DYLD_LIBRARY_PATH ]; then
    unset DYLD_LIBRARY_PATH
  fi
fi

#Der Name der virtualenv-Umgebung lautet"pyqt"Wenn ja, schließen Sie den entsprechenden Pfad von PYTHONPATH aus.
if [ `basename $VIRTUAL_ENV | grep pyqt` ]; then
  # Now, I can use PyQt on only 3.4.x environment
  BREW_PYQT_PATH=`brew --prefix pyqt5`/lib/python3.4/site-packages:`brew --prefix sip`/lib/python3.4/site-packages
  export PYTHONPATH=`echo $PYTHONPATH | sed -e "s|:*$BREW_PYQT_PATH||g"`
  if [ -z $PYTHONPATH ];then
    unset PYTHONPATH
  fi
fi

Da PyQt nicht über pip installiert werden konnte, mussten wir uns bei den Beurteilungsbedingungen auf die Namenskonvention der virtualenv-Umgebung verlassen. Ich bin ein wenig enttäuscht, also werde ich über eine gute Idee nachdenken.

Recommended Posts

Legen Sie die erforderlichen Umgebungsvariablen für PySide (Qt4) und PyQt (Qt5) fest.
[Python] Misst und zeigt die für die Verarbeitung erforderliche Zeit an
Die stärkste PySide / PyQt-Entwicklungsumgebung ist auch PyCharm
Wählen Sie die erforderlichen Variablen in TensorFlow aus und speichern / wiederherstellen
Durchsuche den pandas.DataFrame mit einer Variablen und erhalte die entsprechende Zeile.
Umgebungsvariablen mit Lambda-Uploader einstellen
Erstellen Sie mit Python + Qt (PySide) einen Farbwähler für das Farbrad.
Bereiten Sie die Umgebung für Atom für Pythonista vor
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Setzen Sie die Umgebungsvariable PYTHONPATH auf zsh
Bereiten Sie die Entwicklungsumgebung für keyhac für Mac vor