Is it possible to add PyQt4/PySide packages on a Virtualenv sandbox?

PythonPyqt4VirtualenvPyside

Python Problem Overview


I'm using Virtualenv with profit on my development environment with web.py, simplejson and other web oriented packages.
I'm going to develop a simple python client using Qt to reuse some Api developed with web.py.

Does anybody here had succesfully installed PyQt4 with Virtualenv?
Is it possible?

I've downloaded all the binaries and have PyQt4 installed globally on my python2.6 directory.
If I don't use --no-site--packages option, Virtualenv correctly includes PyQt4 in my new sandbox but, obviously, with all the global packages that I don't need.

Is there a clean way to prepare a new sandbox with --no-site--packages option and then add PyQt4 or PySide using pip, easy_install or some other magic trick?

Python Solutions


Solution 1 - Python

It should be enough to create an empty virtualenv and then copy the contents of the .../site-packages/PyQt4 directories into it.

I suggest to install PyQt4 once globally, make a copy of the directory, uninstall it and then use this trick to create VEs.

Solution 2 - Python

I have the same problem. I use virtualenvwrapper, so I wrote this script to create a link to PyQt in every new virtual environment. Maybe is useful for someone else:

#!/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

link to gist

Solution 3 - Python

Linux debian, python 2.7:

  • Install python-qt4 globaly: sudo apt-get install python-qt4
  • Create symbolic link of PyQt4 to your virtual env ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
  • Create symbolic link of sip.so to your virtual envln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/

Solution 4 - Python

For those who want to use PyQt4 in a Python 3 virtualenv (on OSX) you first install PyQt4 and SIP (I will use homebrew)

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

Then create your virtual environment

$ virtualenv ...

Finally symlink (change the versions of SIP, PyQt4 and Python for those installed on your 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

Solution 5 - Python

I asked if it's possible to install PySide from within virtualenv on irc.freenode.net #pyside channel and got positive answer from hugopl. So I followed instructions from PySide Binaries for Microsoft Windows and it worked. The output is below.

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.

Solution 6 - Python

Let's assume your virtualenv is named myProject and you're using virtualenvwrapper. A Unix platform is also assumed.

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

Solution 7 - Python

Easiest way is to install this : vext.pyqt4

This will add the single system PyQt4 package to your virtualenv.

Ubuntu 16.04 usage:

sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4

Solution 8 - Python

For PySide 1.2.1 and Ubuntu 12.4

Install compilers, Qt related, python sources

sudo apt-get install cmake qt4-qmake qt-sdk python-dev

Create virt env withvirtualenvwrapper

Be ready for compiling 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

Solution 9 - Python

If you installed pyqt via brew on a Mac (specifically I'm on 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 

Of course those version folder numbers may change over time.

Solution 10 - Python

What worked for me was copying /PyQt4/ and sip.x86_64-linux-gnu.so from /usr/lib/python2.7/dist-packages to <VIRTUALENV>/lib/python2.7/site-packages and changing the ownership permissions on these copied files (since the copies were owned by root).

Solution 11 - Python

Expanding on Aaron Digulla's answer, using git to get the file list right can be really handy. I usually do something like this (from an msysGit shell):

# Create temp git repo for the pristine Python installation
$ cd /c/Python27
$ git init -q
$ git add .
$ git commit -qm "Initial commit"

Then run the installer for PyQt4 (or whatever). After that, make a tarball of the files that the installer added and delete the temp git repo, as follows:

# 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

Then you can run PyQt4's uninstaller (if you don't want to clutter up your system Python), and simply untar pyqt4.tar.bz2 into your virtualenv folder. If you're already comfortable using git, this is a great way to ensure you get all the PyQt4-installed files.

NOTE: Installing PyQt4 using the packaged installer also installs SIP. If you actually want to use this SIP to create bindings for your own C/C++ code inside your virtualenv, you'll want to modify the paths in the sipconfig.py file after you copy it over. Otherwise, SIP's build system will still be pointing at the system Python folder (e.g., C:\Python32 or whatever), which won't work if you delete all the PyQt4-installed files from there. (If you don't have any intention of using SIP yourself, you can probably skip this.)

Solution 12 - Python

Symbolic links may work.

I use Linux (Debian/sid), python 3.4, PySide, virtualenv, and PyCharm (IDE), but these same instructions will work for any package and development environment.

Symbolic links between /usr/lib/python3/dist-packages/PySide/ $VIRTUAL_ENV/lib/python3.4/site-packages/PySide/ work for me.

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

Interestingly, if I symbolic link only the PySide directory, it does not work. I need to symlink each file within the directory. That may be a limitation of PyCharm (my IDE) -- I don't know.

Solution 13 - Python

Try this one: pip install python-qt5

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsystempuntooutView Question on Stackoverflow
Solution 1 - PythonAaron DigullaView Answer on Stackoverflow
Solution 2 - PythonJosé LuisView Answer on Stackoverflow
Solution 3 - PythonSimanasView Answer on Stackoverflow
Solution 4 - PythonjabaldonedoView Answer on Stackoverflow
Solution 5 - PythonPiotr DobrogostView Answer on Stackoverflow
Solution 6 - PythonAustinMatherneView Answer on Stackoverflow
Solution 7 - PythonArunView Answer on Stackoverflow
Solution 8 - Pythonb1_View Answer on Stackoverflow
Solution 9 - PythonJames ErricoView Answer on Stackoverflow
Solution 10 - PythonheisenView Answer on Stackoverflow
Solution 11 - PythonevadeflowView Answer on Stackoverflow
Solution 12 - PythonkevinarpeView Answer on Stackoverflow
Solution 13 - PythonAndrey NikishaevView Answer on Stackoverflow