web-dev-qa-db-fra.com

Est-il possible d'ajouter des packages PyQt4 / PySide sur un sandbox Virtualenv?

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?

59
systempuntoout

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.

52
Aaron Digulla

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

lien vers Gist

46
José Luis

Debian Linux, python 2.7:

  • Installez python-qt4 globalement: Sudo apt-get install python-qt4
  • Créez un lien symbolique de PyQt4 vers votre environnement virtuel ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
  • Créez un lien symbolique de sip.so vers votre envln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
28
Simanas

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
8
jabaldonedo

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.
7
Piotr Dobrogost

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.
6
AustinMatherne

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
5
Arun

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.

4
James Errico

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
4
b1_

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).

3
heisen

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.

2
kevinarpe

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.)

2
evadeflow