Building a System Root Directory¶
Experience shows that a major part of deploying an application is building the system root directory. Care must be taken to manage the various different Python installations that may be involved (e.g the target installation, the matching host installation, and the host installation used to run pyqtdeploy itself). Cross-compiling third-party packages is another substantial area of potential problems, particularly for a Python developer who may not be familiar with compiling C++ code.
Best practice for building the system root directory is still evolving. It is anticipated that future versions of pyqtdeploy will offer greater automated support for the task. In the meantime the Mercurial repository contains a Python script called build-sysroot.py which can be used to create a basic system root directory containing a Qt installation, host and target Python installations and static versions of OpenSSL, sip, PyQt5, PyQt3D, PyQtChart, PyQtDataVisualization, PyQtPurchasing and QScintilla. The script itself requires Python v3.5 or later and runs on Windows, OS X and Linux. It is a work-in-progress and completely unsupported and its name and command line interface will change. If you choose to use it then it is recommended that you maintain your own copy.
The first step is to create the system root directory itself. This will be
refered to as sysroot
from now on. You should then create a sub-directory
called src
. You should then copy the source packages of Python, sip and
PyQt5 to the src
directory. For Qt you can use an existing Qt installation
or build one from source. For mobile platforms you would typically use one of
the installers from The Qt Company. If you are building Qt from source then
copy the Qt source package to the src
directory.
build-sysroot.py¶
build-sysroot.py will build and install OpenSSL, Qt, Python, sip, PyQt5, PyQt3D, PyQtChart, PyQtDataVisualization, PyQtPurchasing and QScintilla as specified using command line options:
-
--h
,
--help
¶
This will display a summary of the command line options.
-
--all
¶
This will build each of OpenSSL, Qt, Python, sip, PyQt5, PyQt3D, PyQtChart, PyQtDataVisualization, PyQtPurchasing and QScintilla in that order. The order is important as there are interdependencies between the individual builds.
-
--build
package [package ...]
¶ This will build one or more of the individual packages in the order specified on the command line. package is either
openssl
,qt
,python
,sip
,pyqt5
,pyqt3d
,pyqtchart
,pyqtdatavisualization
,pyqtpurchasing
orqscintilla
. You need to allow for the interdependencies between the builds. For example, if you have updated the source package for sip then you should rebuild sip and PyQt5.
-
--clean
¶
This will deleted the contents of the
sysroot
directory before building. Thesrc
directory is left untouched.
-
--debug
¶
This will cause debug versions of packages to be built where possible.
-
--enable-dynamic-loading
¶
This will enable dynamic loading when building the target Python installation.
-
--qt
DIR
¶ This specifies a directory containing an existing Qt installation which is used instead of building Qt from source. However, you must still use the
--build
option.
-
--sdk
SDK
¶ This specifies the name of the SDK to use when building for Apple-based targets. By default the latest SDK found for the MacOSX platform will be used.
-
--sysroot
DIR
¶ This specifies the name of the system root directory to be populated. If it is not specified then the
SYSROOT
environment variable is used.
-
--target
{android-32
,
ios-64
,
linux-32
,
linux-64
,
osx-64
,
win-32
,
win-64
}
¶ This specifies the target platform. The default is to build natively (i.e. where the host and target platforms are the same).
-
--use-system-python
VERSION
¶ This specifies that an existing host Python installation with the given version is used rather than building it from source. The version is specified as the major and minor numbers separated by a period. The target Python installation is always built from source.
Standard Build Locations¶
When sysroot
has been created with build-sysroot.py the
following values should be used in the Locations tab.
- Interpreter
$SYSROOT/bin/python
- Source directory
$SYSROOT/build/Python-$PDY_PY_MAJOR.$PDY_PY_MINOR.$PDY_PY_MICRO
- Include directory
$SYSROOT/include/python$PDY_PY_MAJOR.$PDY_PY_MINOR
- Python library
$SYSROOT/lib/libpython$PDY_PY_MAJOR.$PDY_PY_MINOR.a
- Standard library directory
$SYSROOT/lib/python$PDY_PY_MAJOR.$PDY_PY_MINOR
- Build directory
build
- qmake
$SYSROOT/bin/qmake