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.
Installieren Sie über Homebrew.
Qt4/Installieren Sie Qt5(Homebrew)
$ brew install qt
$ brew install qt5
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
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
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
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
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