J'utilise Virtualenv avec profit sur mon environnement de développement avec web.py
, simplejson
et autres packages orientés web.
Je vais développer un simple client python utilisant Qt pour réutiliser certains Api développés avec web.py.
Quelqu'un ici a-t-il réussi à installer PyQt4 avec Virtualenv?
C'est possible?
J'ai téléchargé tous les fichiers binaires et j'ai PyQt4
installé globalement sur mon répertoire python2.6.
Si je n'utilise pas --no-site--packages
option, Virtualenv inclut correctement PyQt4
dans mon nouveau sandbox mais, évidemment, avec tous les packages globaux dont je n'ai pas besoin.
Existe-t-il un moyen propre de préparer un nouveau bac à sable avec --no-site--packages
option, puis ajoutez PyQt4
ou PySide
en utilisant pip
, easy_install
ou un autre tour de magie?
Il devrait suffire de créer un virtualenv vide puis de copier le contenu du .../site-packages/PyQt4
répertoires dedans.
Je suggère d'installer PyQt4 une fois dans le monde, de faire une copie du répertoire, de le désinstaller puis d'utiliser cette astuce pour créer des VE.
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 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
Debian Linux, python 2.7:
Sudo apt-get install python-qt4
ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
ln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
Pour ceux qui veulent utiliser PyQt4 dans un Python 3 virtualenv (sur OSX), vous installez d'abord PyQt4 et SIP (j'utiliserai homebrew))
$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3
Créez ensuite votre environnement virtuel
$ virtualenv ...
Enfin un lien symbolique (changez les versions de SIP, PyQt4 et Python pour celles installées 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 était possible d'installer PySide depuis virtualenv sur le canal irc.freenode.net #pyside et j'ai obtenu une réponse positive de hugopl . J'ai donc suivi les instructions de Binaires PySide pour Microsoft Windows et cela a fonctionné. La sortie est ci-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 s'appelle myProject et que vous utilisez virtualenvwrapper. Une plate-forme Unix est également supposée.
$ 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.
Le moyen le plus simple est d'installer ceci: vext.pyqt4
Cela ajoutera le système unique PyQt4
package sur votre virtualenv.
Utilisation d'Ubuntu 16.04:
Sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4
Si vous avez installé pyqt via brew sur un Mac (en particulier, 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 peuvent changer avec le temps.
Pour PySide 1.2.1 et Ubuntu 12.4
Installer des compilateurs, liés à Qt, python sources
Sudo apt-get install cmake qt4-qmake qt-sdk python-dev
Créer virt env avec virtualenvwrapper
Soyez prêt pour la compilation de Qt (~ 30 min)
$ mkvirtualenv ve_name
(ve_name)$ pip install PySide
Tester
$ python -c "from PyQt4 import QtCore; print QtCore.PYQT_VERSION_STR"
4.9.1
Ce qui a fonctionné pour moi, c'était la copie /PyQt4/
et sip.x86_64-linux-gnu.so
de /usr/lib/python2.7/dist-packages
à <VIRTUALENV>/lib/python2.7/site-packages
et en modifiant les autorisations de propriété sur ces fichiers copiés (car les copies appartenaient à root).
Les liens symboliques peuvent fonctionner.
J'utilise Linux (Debian/sid), python 3.4, PySide, virtualenv et PyCharm (IDE), mais ces mêmes instructions fonctionneront pour tout package et environnement de développement.
Liens symboliques entre /usr/lib/python3/dist-packages/PySide/
$VIRTUAL_ENV/lib/python3.4/site-packages/PySide/
travaille 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 ne lie symboliquement que le répertoire PySide
, cela ne fonctionne pas. J'ai besoin de créer un lien symbolique pour chaque fichier du répertoire. Cela peut être une limitation de PyCharm (mon IDE) - je ne sais pas.
Développer la réponse d'Aaron Digulla, utiliser git pour obtenir la bonne liste de fichiers peut être très pratique. 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 de PyQt4 (ou autre). Après cela, faites un tarball des fichiers que le programme d'installation a ajouté et supprimez le dépôt temp git, 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 décompresser pyqt4.tar.bz2
dans votre dossier virtualenv. Si vous êtes déjà à l'aise avec git, c'est un excellent moyen de vous assurer d'obtenir tous les fichiers installés par PyQt4.
NOTE : l'installation de PyQt4 à l'aide du programme d'installation intégré installe également SIP. Si vous voulez réellement utiliser ce SIP pour créer des liaisons pour votre propre code C/C++ dans votre virtualenv, vous vais vouloir modifier les chemins dans le sipconfig.py
fichier après l'avoir copié. Sinon, le système de construction de SIP pointera toujours le système Python (par exemple, C:\Python32
ou autre), ce qui ne fonctionnera pas si vous en supprimez tous les fichiers installés par PyQt4. (Si vous n'avez pas l'intention d'utiliser SIP vous-même, vous pouvez probablement ignorer cela.)