59 votes

Est-il possible d'ajouter des paquets PyQt4/PySide sur un bac à sable Virtualenv ?

J'utilise Virtualenv avec profit sur mon environnement de développement avec web.py , simplejson et d'autres paquets orientés web.
Je vais développer un client simple en python en utilisant Qt pour réutiliser une Api développée avec web.py.

Est-ce que quelqu'un ici a réussi à installer PyQt4 avec Virtualenv ?
Est-ce possible ?

J'ai téléchargé tous les binaires et j'ai PyQt4 installé globalement sur mon répertoire python2.6.
Si je n'utilise pas --no-site--packages Virtualenv inclut correctement PyQt4 dans mon nouveau bac à sable mais, évidemment, avec tous les paquets globaux dont je n'ai pas besoin.

Existe-t-il un moyen propre de préparer un nouveau bac à sable avec --no-site--packages et ensuite ajouter PyQt4 ou PySide en utilisant pip , easy_install ou un autre tour de magie ?

1 votes

Pour PySide utilisez simplement pip install pyside sans aucun tour de magie. Testé sur 1.2.4

52voto

Aaron Digulla Points 143830

Il devrait suffire de créer un virtualenv vide, puis de copier le contenu du fichier .../site-packages/PyQt4 dans celui-ci.

Je suggère d'installer PyQt4 une fois globalement, de faire une copie du répertoire, de le désinstaller et ensuite d'utiliser cette astuce pour créer des VEs.

1 votes

Merci pour votre aide. En copiant le répertoire, je peux importer PyQt4 en ligne de commande sans erreur mais il me manque sip (ImportError : No module named sip ). Dois-je le copier aussi ? Pensez-vous que Pyuic4 fonctionnera ?

5 votes

Oui, ça devrait régler le problème. J'ai manqué sip parce qu'il est dans site-packages (pas de sous-répertoire). Quant à pyuic4, il devrait fonctionner.

1 votes

J'ai copié sip.so dans site-packages sous le répertoire python de sandbox et cela a fonctionné.

46voto

José Luis Points 592

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 que c'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

lien vers le gist

0 votes

Bonjour, j'ai trouvé votre réponse via google, via le commentaire d'autres personnes, je pense que votre script fonctionnerait. Je connais très très peu bash(et j'utilise zsh), pouvez-vous me dire comment exécuter ce script, s'il vous plaît ?

0 votes

@Sean Le script devrait être exécuté par virtualenvwrapper automatiquement lorsque vous créez un nouveau virtualenv. Si vous n'avez que zsh d'installé, vous pouvez remplacer la première ligne du script par la ligne suivante #!/bin/bash avec le chemin de votre exécutable zsh, probablement #!/bin/zsh vous pouvez obtenir ce chemin avec echo $PATH . Cette première ligne est le shebang, regardez ici pour une explication : shebang wikipedia Je n'utilise pas zsh, mais probablement que le script fonctionne aussi avec zsh.

1 votes

Si vous obtenez VAR: bad array subscript lorsque vous l'utilisez, vous utilisez probablement une ancienne version de bash (Apple livre toujours la version 3.2 avec la 10.8). Il est facile de brew install bash et utiliser une version améliorée.

8voto

jabaldonedo Points 6108

Pour ceux qui veulent utiliser PyQt4 dans un virtualenv Python 3 (sur OSX), il faut d'abord installer PyQt4 et SIP (je vais utiliser homebrew).

$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3

Créez ensuite votre environnement virtuel

$ virtualenv ...

Enfin, faites 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

7voto

Piotr Dobrogost Points 14412

J'ai demandé s'il était possible d'installer PySide à partir de virtualenv sur le canal irc.freenode.net #pyside et j'ai obtenu une réponse positive de la part de hugopl . J'ai donc suivi les instructions de Binaires PySide pour Microsoft Windows et cela a fonctionné. Le résultat est le suivant.

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.

0 votes

Cela échoue avec "UnicodeDecodeError : 'ascii' codec can't decode byte 0x92 in position 594 : ordinal not in range(128)" pour moi.

0 votes

Notez que cette uniquement fonctionne sous Windows. bugs.pyside.org/show_bug.cgi?id=943

6voto

AustinMatherne Points 51

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.

0 votes

Sur python3 venvs avec pip récent, il faut ajouter des drapeaux supplémentaires à pip - quelque chose comme ceci : pip install --no-install --allow-external SIP --allow-unverified SIP SIP, mais les Makefiles générés sont encore un peu cassés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X