Est-il possible d'ajouter des packages PyQt4 / pyside sur un bac à sable virtualenv?
-
21-09-2019 - |
Question
J'utilise virtualenv avec profit sur mon environnement de développement avec web.py
, simplejson
et autres web paquets orientés.
Je vais développer un client simple python utilisant Qt pour réutiliser certains Api développé avec web.py.
Est-ce que quelqu'un ici avait installé avec succès PyQt4 avec virtualenv?
Est-il possible?
Je l'ai téléchargé tous les fichiers binaires et ont PyQt4
installé globalement sur mon répertoire python2.6.
Si je ne l'utilise pas l'option --no-site--packages
, virtualenv comprend correctement PyQt4
dans mon nouveau bac à sable, mais, évidemment, avec tous les paquets globaux que je ne ai pas besoin.
Y at-il un moyen propre pour préparer un nouveau bac à sable avec option --no-site--packages
, puis ajoutez PyQt4
ou PySide
en utilisant pip
, easy_install
ou d'un autre tour de magie?
La solution
Il devrait être suffisant pour créer un virtualenv vide puis copiez le contenu des répertoires .../site-packages/PyQt4
en elle.
Je suggère d'installer PyQt4 une fois dans le monde, faire une copie du répertoire, le désinstaller, puis utiliser cette astuce pour créer VEs.
Autres conseils
J'ai le même problème. J'utilise virtualenvwrapper, j'ai donc écrit ce script pour créer un lien vers PyQt dans chaque nouvel environnement virtuel. Peut-être est utile pour quelqu'un d'autre:
#!/bin/bash
# This hook is run after a new virtualenv is activated.
# ~/.virtualenvs/postmkvirtualenv
LIBS=( PyQt4 sip.so )
PYTHON_VERSION=python$(python -c "import sys; print (str(sys.version_info[0])+'.'+str(sys.version_info[1]))")
VAR=( $(which -a $PYTHON_VERSION) )
GET_PYTHON_LIB_CMD="from distutils.sysconfig import get_python_lib; print (get_python_lib())"
LIB_VIRTUALENV_PATH=$(python -c "$GET_PYTHON_LIB_CMD")
LIB_SYSTEM_PATH=$(${VAR[-1]} -c "$GET_PYTHON_LIB_CMD")
for LIB in ${LIBS[@]}
do
ln -s $LIB_SYSTEM_PATH/$LIB $LIB_VIRTUALENV_PATH/$LIB
done
Linux debian, Python 2.7:
- Installer python-Qt4 globaly:
sudo apt-get install python-qt4
- Créer un lien symbolique de PyQt4 à votre
ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
env virtuel - Créer un lien symbolique de sip.so à votre env
ln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
virtuel
Pour ceux qui veulent utiliser PyQt4 dans un Python 3 virtualenv (sur OSX) vous devez d'abord installer PyQt4 et SIP (je vais utiliser homebrew)
$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3
Ensuite, créez votre environnement virtuel
$ virtualenv ...
Enfin symlink (changer les versions de SIP, PyQt4 et Python pour ceux installés sur votre machine)
$ ln -s /usr/local/Cellar/sip/4.15.5/lib/python3.4/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/
$ ln -s /usr/local/Cellar/pyqt/4.10.4/lib/python3.4/site-packages/PyQt4/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/PyQt4
J'ai demandé s'il est possible d'installer PySide à partir de virtualenv sur le canal #pyside irc.freenode.net et obtenu réponse positive de hugopl . Donc, je suivais les instructions de Binaires pyside Microsoft Windows et cela a fonctionné. La sortie est au-dessous.
Z:\virtualenv\pyside>Scripts\activate.bat
(pyside) Z:\virtualenv\pyside>where python
Z:\virtualenv\pyside\Scripts\python.exe
(pyside) Z:\virtualenv\pyside>easy_install PySide
install_dir Z:\virtualenv\pyside\Lib\site-packages\
Searching for PySide
Reading http://pypi.python.org/simple/PySide/
Reading http://www.pyside.org
Reading http://www.pyside.org/files/pkg/
Best match: PySide 1.0.0beta1qt471
Downloading http://www.pyside.org/files/pkg/PySide-1.0.0beta1qt471.win32-py2.6.exe
Processing PySide-1.0.0beta1qt471.win32-py2.6.exe
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic-script.py
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic.exe
creating 'c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg' and adding 'c:\users\
iotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp' to it
creating z:\virtualenv\pyside\lib\site-packages\PySide-1.0.0beta1qt471-py2.6-win32.egg
Extracting PySide-1.0.0beta1qt471-py2.6-win32.egg to z:\virtualenv\pyside\lib\site-packages
Adding PySide 1.0.0beta1qt471 to easy-install.pth file
Installing pyside-uic-script.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.py script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic-script.py script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic.exe script to Z:\virtualenv\pyside\Scripts
Installed z:\virtualenv\pyside\lib\site-packages\pyside-1.0.0beta1qt471-py2.6-win32.egg
Processing dependencies for PySide
Finished processing dependencies for PySide
(pyside) Z:\virtualenv\pyside>python Scripts\pyside_postinstall.py -install
Generating file Z:\virtualenv\pyside\Scripts\qt.conf...
The PySide extensions were successfully installed.
Supposons que votre virtualenv est MyProject et que vous utilisez virtualenvwrapper. Une plate-forme Unix est également pris en charge.
$ workon myProject
$ pip install --no-install SIP
$ pip install --no-install PyQt
$ cd ~/.virtualenvs/myProject/build/SIP
$ python configure.py
$ make
$ make install
$ cd ~/.virtualenvs/myProject/build/PyQt
$ python configure.py
$ make
$ make install
$ cd && rm -rf ~/.virtualenvs/myProject/build # Optional.
plus simple est d'installer ceci: vext.pyqt4
Cela va ajouter le package PyQt4
système unique à votre virtualenv.
Utilisation Ubuntu 16.04:
sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4
Pour PySide 1.2.1 et Ubuntu 12.4
Installer les compilateurs, Qt liés, sources de python
sudo apt-get install cmake qt4-qmake qt-sdk python-dev
Créer virt withvirtualenvwrapper
env
Soyez prêt pour compiler Qt (~ 30 min)
$ mkvirtualenv ve_name
(ve_name)$ pip install PySide
test
$ python -c "from PyQt4 import QtCore; print QtCore.PYQT_VERSION_STR"
4.9.1
Si vous avez installé pyqt par infusion sur un Mac (Plus précisément, je suis sur Mavericks):
ln -s /usr/local/Cellar/sip/4.15.2/lib/python2.7/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages
ln -s /usr/local/Cellar/pyqt/4.10.3/lib/python2.7/site-packages/PyQt4/ ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages/PyQt4
pip install pygments pyzmq
Bien sûr, ces numéros de dossier de version peut changer au fil du temps.
Ce qui a fonctionné pour moi copiait /PyQt4/
et sip.x86_64-linux-gnu.so
de /usr/lib/python2.7/dist-packages
à <VIRTUALENV>/lib/python2.7/site-packages
et la modification des autorisations de propriété sur ces fichiers copiés (depuis les copies appartenaient à la racine).
L'expansion sur la réponse d'Aaron Digulla, en utilisant git pour obtenir la liste des fichiers peut être vraiment droit à portée de main. Je fais habituellement quelque chose comme ça (à partir d'un shell msysGit):
# Create temp git repo for the pristine Python installation
$ cd /c/Python27
$ git init -q
$ git add .
$ git commit -qm "Initial commit"
Ensuite, exécutez le programme d'installation pour PyQt4 (ou autre). Après cela, faire un tarball des fichiers que le programme d'installation ajouté et supprimer le git temporaire, comme suit:
# Stage the PyQt4-installed files and feed a list of their names to tar
# (note that there's no need to actually commit them)
$ git add --all
$ git diff --cached --name-only | tar -jcf pyqt4.tar.bz2 --files-from=-
$ rm -rf .git
Ensuite, vous pouvez exécuter le programme de désinstallation de PyQt4 (si vous ne voulez pas encombrer votre système Python), et simplement untar pyqt4.tar.bz2
dans votre dossier virtualenv. Si vous êtes déjà à l'aise avec git, ceci est une excellente façon de vous assurer d'obtenir tous les fichiers PyQt4 installés.
NOTE : Installation PyQt4 à l'aide du programme d'installation installe également emballé SIP. Si vous voulez vraiment utiliser ce SIP pour créer des liaisons pour votre propre code C / C ++ dans votre virtualenv, vous souhaitez modifier les chemins dans le fichier sipconfig.py
après avoir copié sur. Dans le cas contraire, le système de construction de SIP sera toujours pointer sur le dossier Python du système (par exemple, C:\Python32
ou autre), qui ne fonctionnera pas si vous supprimez tous les fichiers PyQt4 installés à partir de là. (Si vous n'avez pas l'intention d'utiliser vous-même SIP, vous pouvez probablement passer cette étape.)
Les liens symboliques peuvent travailler.
J'utilise Linux (Debian / sid), python 3.4, PySide, virtualenv et PyCharm (IDE), mais ces mêmes instructions fonctionnera pour tout environnement de l'emballage et le développement.
Les liens symboliques entre le travail de /usr/lib/python3/dist-packages/PySide/
$VIRTUAL_ENV/lib/python3.4/site-packages/PySide/
pour moi.
cd $VIRTUAL_ENV/lib/python3.4/site-packages/
mkdir PySide
cd PySide`
for x in /usr/lib/python3/dist-packages/PySide/* ; do ln -s $x ; done
Fait intéressant, si je lien symbolique que le répertoire de PySide
, il ne fonctionne pas. Je dois créer un lien symbolique chaque fichier dans le répertoire. Cela peut être une limitation de PyCharm (mon IDE) -. Je ne sais pas
Essayez celui-ci: pip install-QT5 python