Qt for Python/GettingStarted: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Formatting)
 
(60 intermediate revisions by 11 users not shown)
Line 1: Line 1:
[[Category:Pythonic]]
[[Category:Qt for Python]]                                                                                                                              
== Considerations before starting ==
==Official documentation==


PySide2 supports Python 2 (recommended: 2.7 onwards, Compatibility module ''six'' installed) and Python 3 (recommended: 3.5 onwards).  
Refer to the [https://doc.qt.io/qtforpython/gettingstarted.html official docs] to start building and using Qt for Python.


On Windows, it is recommended to use Python 3 and build with MSVC2015. Python 2 requires building with MSVC2008.
==Using Qt Creator as a project explorer==                                      
 
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 use a C++ parser based on [http://clang.org/ Clang]). The Clang library (C-bindings), version 3.9 or
higher is required for building. Prebuilt versions of it can be downloaded from
[http://download.qt.io/development_releases/prebuilt/libclang/ download.qt.io].
 
Qt needs to be build with the ''QtXmlPatterns'' module.
 
=== Development ===
 
Development happens in the dev branches of the [http://code.qt.io/cgit/pyside/pyside-setup.git/ repositories]. The top level repository has some submodules:
 
Instructions can be found in the [http://code.qt.io/cgit/pyside/pyside-setup.git/tree/README.md?h=5.9 README.md] file.
 
* sources/pyside2-examples: [http://code.qt.io/cgit/pyside/examples.git/ Examples]
* sources/pyside2-tools: uic, rcc
* wiki: Wiki
 
Contributions follow the [[Qt_Project_Guidelines|standard process]].
 
Building requires [https://cmake.org/ CMake].
 
It is helpful to have debug binaries and/or symbols for Python available. On Windows, this is done choosing ''Customized Installation'' when installing python and ticking the respective check boxes. On Linux, debug packages can be installed in addition. For Ubuntu, the packages python3-dbg, libpython3-dbg provide a debug binary python3-dbg.
 
It is also recommended to use a [http://docs.python-guide.org/en/latest/dev/virtualenvs/ 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
  source testenv/bin/activate
or
CALL testenv\Scripts\activate.bat
 
Before building the first time, the module [http://www.sphinx-doc.org/en/1.4.9/ Sphinx] should be installed into the virtual environment:
pip install sphinx
 
=== Building PySide2 ===
 
The script ''setup.py'' in the [http://code.qt.io/cgit/pyside/pyside-setup.git/ top level repository] is used to build and install the PySide2 package. It takes a mode argument (''build'' or ''install'') and several options.
 
Various options:
* --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
 
A typical invocation looks like:
setup.py install --build-tests
 
A successful build can be tested by running an example:
  python sources/pyside2-examples/examples/widgets/widgets/calculator.py
 
Note: When 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.
 
=== Running Tests ===
 
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 [https://bugreports.qt.io/browse/PYSIDE-363 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
 
=== 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.
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.


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:                              
 
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


#Open '''pyside-setup/sources/shiboken2/CMakeLists.txt''' and specify a 5.12+ 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.12+ Qt Kit
#Go to the 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/py3.6-qt5.12.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/qt511_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.
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.


=== Building PySide2 from Source Packages Provided by Distributions ===
==Troubleshooting / Known Issues==
 
                                                                                   
PySide2 is ideally built from a source-based package provided for your platform's package manager (e.g., Arch Linux's [https://wiki.archlinux.org/index.php/pacman pacman], Gentoo Linux's [https://wiki.gentoo.org/wiki/Portage Portage]). If your platform fails to provide such a package, PySide2 may also be manually built from scratch as a fallback.
*Qt 5.9 does not work with OpenSSL 1.1                                       
 
**When doing a custom Qt build (some unspecified versions for now), It is necessary to have an OpenSSL version of 1.0.x, since there are compatibility issues with newer versions of OpenSSL ([https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes#Qt see details])
==== Arch Linux ====
*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.
Arch Linux automates PySide2 installation from source via the [https://aur.archlinux.org AUR] package [https://aur.archlinux.org/pkgbase/pyside2-git ''pyside2-git''] as follows:
*Qt packages that directly link to OpenSSL (as opposed to runtime discovery) are not currently supported.
 
*Make sure that the Python environment location where the PySide2 package will be installed is writable (otherwise you might get various permission denied errors). The install location can be found with 99% probability by running:
* Download ''pyside2-git''.
 
git clone https://aur.archlinux.org/pyside2-git.git
 
* Install ''pyside2-git''.
 
cd pyside2-git
makepkg -srci
 
==== Gentoo Linux ====
 
Gentoo Linux automates PySide2 installation from source via the [https://github.com/leycec/raiagent/tree/master/dev-python/pyside ''pyside-9999:2''] package hosted by the [https://github.com/gentoo/qt official qt overlay] as follows:
 
* Install [https://wiki.gentoo.org/wiki/Layman layman] (if you haven't already).
 
emerge layman
echo 'source /var/lib/layman/make.conf' >> /etc/portage/make.conf
 
* Add the [https://github.com/gentoo/qt qt overlay].
 
layman -a qt
 
* Synchronize overlays.
 
layman -S
 
* 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 [https://packages.gentoo.org/packages/dev-python/PyQt5 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''.
 
emerge pyside-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
 
=== How to build from sources against Qt 5.7 on Ubuntu 16.04 LTS 64bit ([http://www.acronymfinder.com/Works-on-My-Machine-(WOMM).html WOMM]) ===
 
==== prerequisites ====
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
 
export CLANG_INSTALL_DIR=$PWD/libclang
 
==== step 02 - getting pyside2 ====
git clone --recursive https://codereview.qt-project.org/pyside/pyside-setup
cd pyside-setup && git checkout 5.9
cd sources/shiboken2 && git checkout 5.9
cd ../pyside2 && 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
''(change the path accordingly to your system!)''


==== step 04 - install pyside2 in your env ====
  python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
  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 to your system!)''


==== step 05 - play tetrix ====
*Building failing because graphviz wasn't found. If you're using pyenv and installed it using pip, try to install it using your package manager:<syntaxhighlight>
LD_LIBRARY_PATH=/home/filippo/Qt/5.7/gcc_64/lib/ python sources/pyside2-examples/examples/widgets/widgets/tetrix.py
dnf install graphviz.x86_64 #Fedora
''(change the paths accordingly to your system!)''
</syntaxhighlight>
*20220727 Urgent update: If you build PySide with a custom built Python, you should build python with the following options: <syntaxhighlight lang="shell">
PYTHON_CONFIGURE_OPTS="--enable-shared --with-trace-refs"
</syntaxhighlight>For example:<syntaxhighlight lang="shell">
PYTHON_CONFIGURE_OPTS="--enable-shared --with-trace-refs" pyenv install -kg 3.9.13
</syntaxhighlight>This makes PySide2 work without the limited API. <br />

Latest revision as of 14:08, 27 July 2022

Official documentation

Refer to the official docs to start building and using Qt for Python.

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:

  1. Open pyside-setup/sources/shiboken2/CMakeLists.txt and specify a 5.12+ Qt Kit to be used
  2. Build the project as usual (by pressing the build icon for instance)
  3. Open pyside-setup/sources/pyside2/CMakeLists.txt and specify the same 5.12+ Qt Kit
  4. Go to the 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·
  5. An example path under macOS is /Users/user/Dev/pyside2-setup/pyside_install/py3.6-qt5.12.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
  6. (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/qt511_source/include)
  7. 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.

Troubleshooting / Known Issues

  • Qt 5.9 does not work with OpenSSL 1.1
    • When doing a custom Qt build (some unspecified versions for now), It is necessary to have an OpenSSL version of 1.0.x, 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.
  • Qt packages that directly link to OpenSSL (as opposed to runtime discovery) are not currently supported.
  • Make sure that the Python environment location where the PySide2 package will be installed is writable (otherwise you might get various permission denied errors). The install location can be found with 99% probability by running:
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
  • Building failing because graphviz wasn't found. If you're using pyenv and installed it using pip, try to install it using your package manager:
    dnf install graphviz.x86_64 #Fedora
    
  • 20220727 Urgent update: If you build PySide with a custom built Python, you should build python with the following options:
    PYTHON_CONFIGURE_OPTS="--enable-shared --with-trace-refs"
    
    For example:
    PYTHON_CONFIGURE_OPTS="--enable-shared --with-trace-refs" pyenv install -kg 3.9.13
    
    This makes PySide2 work without the limited API.