diff options
Diffstat (limited to 'sources/pyside6/doc/gettingstarted.rst')
-rw-r--r-- | sources/pyside6/doc/gettingstarted.rst | 505 |
1 files changed, 0 insertions, 505 deletions
diff --git a/sources/pyside6/doc/gettingstarted.rst b/sources/pyside6/doc/gettingstarted.rst deleted file mode 100644 index 1a465b79c..000000000 --- a/sources/pyside6/doc/gettingstarted.rst +++ /dev/null @@ -1,505 +0,0 @@ -|project| Getting Started -========================== - -.. important:: This page is focused on building |project| **from source**. - If you just want to install |pymodname|, you need to run: :command:`pip install pyside6`. - - For more details, refer to our `Quick Start`_ guide. Additionally, you can check the - :ref:`FAQ <faq>` related to the project. - -.. _Quick Start: quickstart.html - -General Requirements --------------------- - -The following prerequisites must be installed before you build |project|. -On **Linux** you might get them with your operating system package manager, on **macOS** -you might get them with ``brew``, and on **Windows** you can download the installer from each -website. - - * **Python**: 3.6+ `[official Python website] <https://www.python.org/downloads/>`_ - * **Qt:** 6.0+ `[online installer] <https://download.qt.io/official_releases/online_installers/>`_ - * **CMake:** 3.18+ `[official CMake website] <https://cmake.org/download/>`_ - * **Git:** 2.0+. `[official Git website] <https://git-scm.com/downloads>`_ - * **libclang:** The libclang library, recommended: version 10 for 6.0+. - Prebuilt versions for each OS can be `downloaded here`_. - -.. _downloaded here: https://download.qt.io/development_releases/prebuilt/libclang/ - -Guides per platform -------------------- - -You can refer to the following pages for platform specific instructions: - -.. raw:: html - - <table class="special"> - <colgroup> - <col style="width: 200px" /> - <col style="width: 200px" /> - <col style="width: 200px" /> - </colgroup> - <tr> - <td><a href="gettingstarted-windows.html"><p><strong>Windows</strong></p></a></td> - <td><a href="gettingstarted-macOS.html"><p><strong>macOS</strong></p></a></td> - <td><a href="gettingstarted-linux.html"><p><strong>Linux</strong></p></a></td> - </tr> - </table> - -.. important:: |project| does not yet support WebAssembly and the mobile operating systems (Android or iOS). - -Most Linux-based embedded OS provide PySide with their official -package manager (for example, `Raspbian`_ and `ArchlinuxARM`_). - -.. _Raspbian: https://www.raspbian.org/ -.. _ArchlinuxARM: https://archlinuxarm.org/ - -A normal building command will look like this:: - - python setup.py install --qtpaths=/path/to/qtpaths \ - --ignore-git \ - --debug \ - --build-tests \ - --parallel=8 \ - --verbose-build \ - --module-subset=Core,Gui,Widgets - -Which will build and install the project with **debug** symbols, including the **tests**, -using **ninja** (instead of make), and considering only the **module subset** of -:mod:`QtCore <PySide6.QtCore>`, :mod:`QtGui <PySide6.QtGui>`, and -:mod:`QtWidgets <PySide6.QtWidgets`. - -Other important options to consider are: - * ``--cmake``, to specify the path to the cmake binary, - * ``--reuse-build``, to rebuild only the modified files, - * ``--openssl=/path/to/openssl/bin``, to use a different path for OpenSSL, - * ``--standalone``, to copy over the Qt libraries into the final package to make it work on other - machines, - * ``--build-docs``, to enable the documentation build. - * ``--doc-build-online``, to build documentation using the online template (by - default it uses the offline) - -Testing the installation ------------------------- - -Once the installation finishes, you will be able to execute any of our examples:: - - python examples/widgets/widgets/tetrix.py - -Running Tests -------------- - -Using the ``--build-tests`` option will enable us to run all the auto tests inside the project:: - - python testrunner.py test > testlog.txt - -.. note:: On Windows, don't forget to have qtpaths in your path - (:command:`set PATH=E:\\\Path\\\to\\\Qt\\\6.0.0\\\msvc2019_64\\\bin;%PATH%`) - -You can also run a specific test (for example ``qpainter_test``) by running:: - - ctest -R qpainter_test --verbose - -.. _cross_compilation: - -Cross Compilation ------------------ - -Starting from 6.3, it is possible to cross-compile Shiboken (module), and -PySide. This functionality is still in Technical Preview, which means it could -change in the future releases. - -.. important:: The only supported configuration is using a host Linux - machine to cross-compile to a Linux target platform. - -Cross compiling software is a valid use case that many projects rely on, -however, it is a complicated process that might fail due to many reasons. - -Before starting with the process, it is important to understand the details of -the build system, and the goal of cross compilation. - -In the build process, a ``Host`` is the computer you are currently using to -compile, and a ``Target`` is your embedded device that you are compiling for. - -Qt for Python is being built using setuptools, and relies on a ``setup.py`` file -that is called recursively to build Shiboken (module), -Shiboken (generator), and PySide. As the generator is creating -the wrappers for the bindings, it's not cross compiled -for the target. -Only the Shiboken (module) and PySide are cross compiled. - -The building process requires a Qt installation, and a Python interpreter -on both the host, and the target. The used Qt versions on both platforms -should have the same minor version. That is, Qt 6.3 (host) -cannot be used with a Qt 6.2 (target), or the other way around. - - -Prerequisites -~~~~~~~~~~~~~ - -First and foremost, you need to have access to the target device because you -need to copy several system files (sysroot). We recommend a Linux OS that has -the latest Qt versions, like `Manjaro ARM`_ or `Archlinux ARM`_. - -* (target) Install Qt 6.3+ on the system using the package manager. -* (host) Install Qt 6.3+ on the system using the package manager or Qt - Installer. -* (target, host) Install the library and development packages that provide - C++ headers, linkers, libraries, and compilers. -* (target, host) Install Python interpreter v3.7 or later -* (target, host) Install CMake 3.17+ - -After installing these prerequisites, copy the ``target`` sysroot to your -``host`` computer. This process is tricky, because copying system files from -another computer might cause problems with the symbolic links. Here you -have two options to achieve that. - -Option A: Copying the files -*************************** - -Create a directory to copy the sysroot of your target device, -for example ``rpi-sysroot``, and perform the copy on your host computer: - -.. code-block:: bash - - rsync -vR --progress -rl --delete-after --safe-links \ - USERNAME@TARGET_IP:/{lib,usr,opt/vc/lib} rpi-sysroot/ - -Ensure to replace ``USERNAME`` and ``TARGET_IP`` with your system appropriate -values. - -Option B: Packaging the file system -*********************************** - -Create a package for your sysroot in your target: - -.. code-block:: bash - - tar cfJ ~/sysroot.tar.xz /lib /usr /opt/vc/lib - -Copy the package from the target to your host: - -.. code-block:: bash - - rsync -vR --progress USERNAME@TARGET_IP:sysroot.tar.xz . - -Once you have the tar file, unpack it inside a ``rpi-sysroot`` directory. - -It is recommended to run the following script to fix -most of the issues you would find with symbolic links: - -.. code-block:: python - - import sys - from pathlib import Path - import os - - # Take a sysroot directory and turn all the absolute symlinks and turn them into - # relative ones such that the sysroot is usable within another system. - - if len(sys.argv) != 2: - print(f"Usage is {sys.argv[0]} <sysroot-directory>") - sys.exit(-1) - - topdir = Path(sys.argv[1]).absolute() - - def handlelink(filep, subdir): - link = filep.readlink() - if str(link)[0] != "/": - return - if link.startswith(topdir): - return - relpath = os.path.relpath((topdir / link).resolve(), subdir) - os.unlink(filep) - os.symlink(relpath, filep) - - for f in topdir.glob("**/*"): - if f.is_file() and f.is_symlink(): - handlelink(f, f.parent) - -Setting up the toolchain -~~~~~~~~~~~~~~~~~~~~~~~~ - -To perform the cross compilation, you need a special set of compilers, -libraries, and headers, which runs on the host architecture, but generates -(binaries/executables) for a target architecture. -For example, from x86_64 to aarch64. - -It is recommended to use the official 10.2 `ARM Developer cross compilers`_, -which you can find on their official website. For this tutorial, we choose -``aarch64`` target architecture and we will assume that you downloaded the -`gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz`_ file, -and unpacked it. - -With those compilers, now you need a CMake toolchain file. This is -a configuration file to set the compilers and sysroot information, together -with extra options like compilation flags, and other details. You can use the -following file as an example, but keep in mind they might vary: - -.. code-block:: cmake - - # toolchain-aarch64.cmake - cmake_minimum_required(VERSION 3.18) - include_guard(GLOBAL) - - set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_SYSTEM_PROCESSOR aarch64) - - set(TARGET_SYSROOT /path/to/your/target/sysroot) - set(CROSS_COMPILER /path/to/your/crosscompiling/compilers/) - - set(CMAKE_SYSROOT ${TARGET_SYSROOT}) - - set(ENV{PKG_CONFIG_PATH} "") - set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig) - set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT}) - - set(CMAKE_C_COMPILER ${CROSS_COMPILER}/aarch64-none-linux-gnu-gcc) - set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}/aarch64-none-linux-gnu-g++) - - set(QT_COMPILER_FLAGS "-march=armv8-a") - set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe") - set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed") - - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - - include(CMakeInitializeConfigs) - - function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING) - if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS") - set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}") - - foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO) - if (DEFINED QT_COMPILER_FLAGS_${config}) - set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}") - endif() - endforeach() - endif() - - if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS") - foreach (config SHARED MODULE EXE) - set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}") - endforeach() - endif() - - _cmake_initialize_per_config_variable(${ARGV}) - endfunction() - -You need to adjust the paths in these two lines:: - - set(TARGET_SYSROOT /path/to/your/target/sysroot) - set(CROSS_COMPILER /path/to/your/crosscompiling/compilers/) - -and replace them with the sysroot directory (the one we called ``rpi-sysroot``), -and the compilers (the ``gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin`` directory). - - -Cross compiling PySide -~~~~~~~~~~~~~~~~~~~~~~ - -After you have installed the prerequisites and copied the necessary files, you -should have the following: - -* The compilers to cross compile (``gcc-argm-10.2-...``), -* The target sysroot (``rpi-sysroot``), -* The toolchain cmake file (``toolchain-aarch64.cmake``), -* The ``pyside-setup`` repository, - -An example of the ``setup.py`` invocation might look like the following: - -.. code-block:: bash - - python setup.py bdist_wheel \ - --parallel=8 --ignore-git --reuse-build --standalone --limited-api=yes \ - --cmake-toolchain-file=/opt/toolchain-aarch64.cmake \ - --qt-host-path=/opt/Qt/6.3.0/gcc_64 \ - --plat-name=linux_aarch64 \ - -Depending on the target platform, you could use ``linux_armv7``, -``linux_aarch64``, etc. - -If the process succeeds, you will find the target wheels in your ``dist/`` -directory, for example: - -.. code-block:: bash - - PySide6-6.3.0-6.3.0-cp36-abi3-manylinux2014_aarch64.whl - shiboken6-6.3.0-6.3.0-cp36-abi3-manylinux2014_aarch64.whl - - -Troubleshooting -*************** - -* If the auto-detection mechanism fails to find the Python or Qt installations - you have in your target device, you can use two additional options:: - - --python-target-path=... - - and:: - - --qt-target-path=... - -* In case the automatic build of the host Shiboken (generator) fails, - you can specify the custom path using:: - - --shiboken-host-path=... - -.. _`Manjaro ARM`: https://manjaro.org/download/#ARM -.. _`Archlinux ARM`: https://archlinuxarm.org -.. _`ARM Developer Cross Compilers`: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads -.. _`gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz`: https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz - -.. _building_documentation: - -Building the documentation --------------------------- - -Starting from 6.3, the documentation is not being built by default. -When using the second option described in this section, make sure to use the -``--build-docs`` option. - -Starting from 5.15, there are two options to build the documentation: - -1. Building rst-only documentation (no API) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The process of parsing Qt headers to generate the PySide API documentation can take several -minutes, this means that modifying a specific section of the rst files we currently have, might -become a hard task. - -For this, you can install :command:`sphinx` on a virtual environment, and execute the following command:: - - python setup.py build_rst_docs - -which will generate a ``html/`` directory with the following structure:: - - html - └── pyside6 - ├── index.html - ├── ... - └── shiboken6 - ├── index.html - └── ... - -so you can open the main page ``html/pyside6/index.html`` on your browser to check the generated -files. - -This is useful when updating the general sections of the documentation, adding tutorials, -modifying the build instructions, and more. - -2. Building the documentation (rst + API) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The documentation is being generated using **qdoc** to get the API information, and also **sphinx** -for the local Python related notes. - -The system required ``libxml2`` and ``libxslt``, also on the Python environment, ``sphinx`` and -``graphviz`` need to be installed before running the installation process:: - - pip install graphviz sphinx sphinx_tabs - -After installing ``graphviz``, the ``dot`` command needs to be in PATH, otherwise, -the process will fail. Installing ``graphviz`` system-wide is also an option. - -Since the process relies on a Qt installation, you need to specify where the -``qtbase`` directory is located:: - - export QT_SRC_DIR=/path/to/qtbase - -Once the common ``setup.py`` build process finishes (remember to use ``--build-docs`` to enable -the documentation build), you can go to the generated ``*_build/*_release/pyside6`` -directory, and run:: - - ninja apidoc - -.. note:: The :command:`apidoc` make target builds offline documentation in QCH (Qt Creator Help) - format by default. You can switch to building for the online use with the ``--doc-build-online`` - configure option. - -The target executes several steps: - -#. The ``qdoc`` tool is run over the Qt source code to produce documentation in WebXML format. -#. ``shiboken6`` is run to extract the functions for which bindings exist from WebXML and convert it into RST. -#. ``sphinx`` is run to produce the documentation in HTML format. - -Re-running the command will not execute step 1 unless the file -``qdoc_output/webxml/qtcore-index.webxml`` is removed from the build tree. -Similarly, step 2 will not be executed unless the file ``rst/PySide6/QtCore/index.rst`` -is removed. - -Finally, you will get a ``html`` directory containing all the generated documentation. The offline -help files, ``PySide.qch`` and ``Shiboken.qch``, can be moved to any directory of your choice. You -can find ``Shiboken.qch`` in the build directory, ``*_build\*_release\shiboken6\doc\html``. - -If you want to temporarily change a ``.rst`` file to examine the impact on -formatting, you can re-run ``sphinx`` in the ``doc`` directory:: - - sphinx-build rst html - -Viewing offline documentation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The offline documentation (QCH) can be viewed using the Qt Creator IDE or Qt Assistant, which is -a standalone application for viewing QCH files. - -To view the QCH using Qt Creator, following the instructions outlined in -`Using Qt Creator Help Mode <https://doc.qt.io/qtcreator/creator-help.html>`_. If you chose to -use Qt Assistant instead, use the following command to register the QCH file before launching -Qt Assistant:: - - assistant -register PySide.qch - -.. note:: Qt Assistant renders the QCH content using the QTextBrowser backend, which supports - a subset of the CSS styles, However, Qt Creator offers an alternative litehtml-based - backend, which offers better browsing experience. At the moment, this is not the default - backend, so you have to select the litehtml backend - explicitly under the ``General`` tab in ``Qt Creator >> Tools >> Options >> Help``. - -Using the internal tools ------------------------- - -A set of tools can be found under the ``tools/`` directory inside the ``pyside-setup`` repository. - -* ``checklibs.py``: Script to analyze dynamic library dependencies of Mach-O binaries. - To use this utility, just run:: - - python checklibs.py /path/to/some.app/Contents/MacOS/Some - - This script was fetched from this repository_. - -* ``create_changelog.py``: Script used to create the CHANGELOG that you can find in the ``dist/`` - directory. Usage:: - - python create_changelog.py -r 6.0.1 -v v6.0.0..6.0 -t bug-fix - -* ``debug_windows.py``: This script can be used to find out why PySide modules - fail to load with various DLL errors like Missing DLL or Missing symbol in DLL. - - You can think of it as a Windows version of :command:`ldd` / ``LD_DEBUG``. - - Underneath, it uses the :command:`cdb.exe` command line debugger and the :command:`gflags.exe` - tool, which are installed with the latest Windows Kit. - - The aim is to help developers debug issues that they may encounter using the PySide imports on - Windows. The user should then provide the generated log file. - - Incidentally it can also be used for any Windows executables, not just Python. - To use it just run:: - - python debug_windows.py - -* ``missing_bindings.py``: This script is used to compare the state of PySide and PyQt - regarding available modules and classses. This content is displayed in our `wiki page`_, - and can be used as follows:: - - python missing_bindings.py --qt-version 6.0.1 -w all - -.. note:: The script relies on BeautifulSoup to parse the content and generate a list of the - missing bindings. - -.. _repository: https://github.com/liyanage/macosx-shell-scripts/ -.. _`wiki page`: https://wiki.qt.io/Qt_for_Python_Missing_Bindings -.. _BeautifulSoup: https://www.crummy.com/software/BeautifulSoup/ |