Qt for Python/GettingStarted
- 1 Considerations before starting
- 2 Development
Considerations before starting
PySide2 supports Python 2 (recommended: 2.7 onwards, Compatibility module six installed) and Python 3 (recommended: 3.5 onwards).
On Windows, it is recommended to use Python 3 and build with MSVC2015. Python 2 requires building with MSVC2008. The Qt library has to be built with the same version of MSVC as Python and PySide2.
Currently, Qt 5.6 and Qt 5.9 onwards are supported. Note that the branch of the pyside-setup repository must match that of the Qt version used. PySide versions following 5.6 (so 5.9 and dev) use a C++ parser based on Clang).
The Clang library (C-bindings), version 3.9 or higher is required for building. Prebuilt versions of it can be downloaded from download.qt.io.
Qt needs to be built with the QtXmlPatterns module.
Development happens in the 5.9 and dev branches of the pyside-setup repository.
Build instructions can be found in the sections below.
The top level repository has the following submodules:
- sources/pyside2-examples: Examples
- sources/pyside2-tools: uic, rcc tools
- wiki: Wiki
Contributions follow the standard process.
Building requires CMake.
It is helpful to have debug binaries and/or symbols for Python available. On Windows, this is done by choosing Customized Installation when installing Python and ticking the respective check boxes. On Linux, debug packages can be installed separately. For Ubuntu, the packages python3-dbg, libpython3-dbg provide a debug binary python3-dbg. On macOS you will need to build the Python interpreter with debug symbols by hand.
It is also recommended to use a Virtual Environment for testing to be able to always start from a clean base and avoid issues with write permissions in installations.
On Linux, the command
virtualenv -p /usr/bin/python3-dbg testenv
creates a Virtual Environment named testenv for debugging purposes. On Windows, an installation step may be required:
python -m pip install virtualenv python -m virtualenv testenv
The Virtual Environment is activated by
Before building the first time, the module Sphinx should be installed into the virtual environment:
pip install sphinx
General build instructions can be found in the README.md file.
Sample / specific instructions for building on Ubuntu can be found below.
- Windows, Linux or macOS (Android / iOS / embedded is not supported at the moment)
- Qt package from https://www.qt.io or a custom build of Qt (preferably Qt 5.9 or Qt 5.6)
- Python from https://www.python.org/downloads/ (Python 3.6 or Python 2.7)
- GCC (Linux), Xcode (macOS), MSVC2015 (for Python 3 on Windows), MSCVC2008 (for Python 2 on Windows)
- CMake from https://cmake.org/download/ (>= 3.1)
- libclang (required for the 5.9 and dev branches) from download.qt.io (>= 3.9)
- virtualenv (optional but recommended)
- Python sphinx package for documentation (optional, pip install sphinx)
setup.py build script
The script setup.py in the top level repository is used to build and install the PySide2 package. It takes a mode argument (build or install) and several options (more options are documented in setup.py itself).
The main options are:
- --qmake=<binary> Path to qmake of the Qt library to be used
- --cmake=<binary> Path to cmake
- --build-tests: Creates a directory containing the tests along with some helper packages
- --ignore-git: Prevents setup.py from cloning and checking out the submodules.
- --debug: Build in Debug mode
- --reuse-build: Rebuilds only modified files (currently does not work for typesystem xml files)
- --openssl: Path to OpenSSL
- --jobs : Number of threads to use when building
If you are on Linux, before you call setup.py you must configure your system to use Clang as C and C++ compiler:
export CC=/usr/bin/clang export CXX=/usr/bin/clang++
A typical invocation looks like:
setup.py install --build-tests --jobs=4
A successful build can be tested by running an example:
You can search for working examples by typing
cd sources/pyside2-examples git grep "PySide2 port"
Note: When doing local builds of Qt on Linux, the environment LD_LIBRARY_PATH needs to be set to point to the location of the Qt library when running examples, as otherwise they are not found by Python. On macOS you will need to set either the DYLD_LIBRARY_PATH or DYLD_FRAMEWORK_PATH environment variables.
python testrunner.py test > testlog.txt
Run only one test(qpainter_test):
ctest -R qpainter_test --verbose
Building the Documentation
This is currently unexplored terrain PYSIDE-363.
- The sources are in pyside2/doc
- libXML2 and libXSLT should be present when building PySide2 (Ubuntu: apt-get install libxml2-dev libxslt1-dev)
- graphviz + dot should be installed
- QT_SRC_DIR needs to be set
- sphinx should be installed (pip install sphinx)
- qdoc3 is used to generate it
How to build from sources against Qt 5.7, Qt 5.8, Qt 5.9 on Ubuntu 16.04 LTS 64bit (WOMM)
Qt 5.7+ (better from http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run) libclang-release_39-linux-Rhel7.2-gcc5.3-x86_64.7z from http://download.qt.io/development_releases/prebuilt/libclang/
step 01 - libclang
wget http://download.qt.io/development_releases/prebuilt/libclang/libclang-release_39-linux-Rhel7.2-gcc5.3-x86_64.7z 7z x libclang-release_39-linux-Rhel7.2-gcc5.3-x86_64.7z
step 02 - getting pyside2
git clone --recursive https://codereview.qt-project.org/pyside/pyside-setup cd pyside-setup && git checkout 5.9
(commit 8fee86dd7b58c13db39c7c354558119a6346fa5a builds fine)
step 03 - building pyside2
python setup.py build --qmake=/home/filippo/Qt/5.7/gcc_64/bin/qmake --openssl=/usr/bin/openssl --build-tests --ignore-git --jobs=4
(change the path accordingly on your system!)
step 04 - install pyside2 in your env
ln -s /home/filippo/tmp/pyside2/src/pyside-setup/pyside_package/PySide2 /home/filippo/tmp/pyside2/lib/python2.7/site-packages/PySide2 ln -s /home/filippo/tmp/pyside2/src/pyside-setup/pyside_package/PySide2.egg-info/ /home/filippo/tmp/pyside2/lib/python2.7/site-packages/PySide2.egg-info
(change the paths accordingly on your system!)
step 05 - play tetrix
LD_LIBRARY_PATH=/home/filippo/Qt/5.7/gcc_64/lib/ python sources/pyside2-examples/examples/widgets/widgets/tetrix.py
(change the paths accordingly on your system!)
Building PySide2 from Source Packages Provided by Distributions
PySide2 is ideally built from a source-based package provided for your platform's package manager (e.g., Arch Linux's pacman, Gentoo Linux's Portage). If your platform fails to provide such a package, PySide2 may also be manually built from scratch as a fallback.
1. Download python-pyside2-git.
2. Install python-pyside2-git.
cd python-pyside2-git makepkg -srci
yaourt -S python-pyside2-git
- Install layman (if you haven't already).
emerge layman echo 'source /var/lib/layman/make.conf' >> /etc/portage/make.conf
- Add the qt overlay.
layman -a qt
- Synchronize overlays.
- Unmask pyside-9999:2 and shiboken-9999:2.
echo '~dev-python/pyside-9999:2 **\n~dev-python/shiboken-9999:2 **' >> /etc/portage/package.accept_keywords
- (Optional) Enable pyside-9999:2 USE flags. Most USE flags currently supported by the official PyQt5 ebuild are also supported by the pyside-9999:2 ebuild. For example:
echo '~dev-python/pyside-9999:2 concurrent designer help testlib widgets -kde -phonon -script -sql -webkit -webchannel -webengine' >> /etc/portage/package.use
- Install pyside-9999:2 and shiboken-9999:2.
Manually on Ubuntu (Debug Build)
This is useful for debugging into the interpreter as well as into extensions. Roughly the steps are the following:
git clone https://github.com/python/cpython python3.6 && cd python3.6 && git checkout 3.6 sudo apt-get build-dep python3.5 # (at time of writing 3.6 was not packaged yet, but it doesn't matter, it's just build dependencies) mkdir build_debug && cd build_debug ../configure --with-pydebug --enable-shared --prefix=/home/CHANGE_ME/python36_installed LDFLAGS="-Wl,--rpath=/home/CHANGE_ME/python36_installed/lib" # (you can modify the install path to any directory you wish, make sure to change it in the rpath setting as well) make -j4 && make install virtualenv -p /home/CHANGE_ME/python36_installed/bin/python3.6dm py36
After that you can build PySide2 using the custom Python interpreter, using the virtualenv you created in the last step. Make sure to change the paths to reflect your own directory structure.
cd /path/to/location/of/pyside/supermodule python setup.py install --qmake=/home/CHANGE_ME/qt56/bin/qmake --cmake=/usr/bin/cmake --openssl=/usr/bin/openssl --debug --jobs=4 --ignore-git --build-tests
Using Qt Creator as a project explorer
Qt Creator 4.0+ can be used to open the PySide and Shiboken CMakeLists.txt files as projects, and thus provide usual IDE features for developing PySide - project file navigation, code completion (C++ only), following symbols under cursor (C++ only), syntax highlighting, locator usage, debugging, etc.
Currently there is a limitation that Shiboken has to be built first using the terminal, because the installed shiboken CMake packages will have to be specified for the PySide project in Qt Creator.
The steps for opening the projects in Qt Creator are:
- Open pyside-setup/sources/shiboken2/CMakeLists.txt, and specify a 5.6 Qt Kit to be used
- Build the project as usual (by pressing the build icon for instance)
- Open pyside-setup/sources/pyside2/CMakeLists.txt, and specify the same 5.6 Qt Kit
- Go to projects tab, and under the Build / CMake section find the Shiboken2_DIR setting. You have to specify the path to the folder where the Shiboken CMake package was installed when you compiled Shiboken from the terminal
- An example path under MacOS is /Users/user/Dev/pyside2-setup/pyside_install/py2.7-qt5.6.1-64bit-debug/lib/cmake/Shiboken2-2.0.0. The path has to be adjusted depending on the user folder name, the version of python and qt, etc
- (Optional) On MacOS you also have to set the ALTERNATIVE_QT_INCLUDE_DIR setting to the Qt kit include path (e.g. /Users/user/Dev/qt56_source/include)
- Apply the CMake configuration changes (by pressing the button), and you should be able to build PySide
Now you can use the project explorer to look through the source cpp files, python files, use the locator feature to open files and file classes / methods, and other features that Qt Creator provides.
- PySide2 5.9 does not work with OpenSSL 1.1
It is necessary to have OpenSSL 1.0.x to work around Qt and PySide v5.9, since there are compatibility issues with newer versions of OpenSSL (see details)
- PySide2 looks at the system installation if the local Qt version does not have a required module
The only workaround is to uninstall any module from the system, then PySide2 can look at only the Qt path currently being use.