diff options
| author | Adrian Herrmann <adrian.herrmann@qt.io> | 2023-02-07 17:04:54 +0100 |
|---|---|---|
| committer | Adrian Herrmann <adrian.herrmann@qt.io> | 2023-02-14 13:13:35 +0100 |
| commit | 06e7cb7d61e6ef7bbd073b85cbf8d5e324e242c6 (patch) | |
| tree | 71315845d60e0dbdd5de070153e740d65d9d4014 /sources/pyside6/libpyside | |
| parent | e74125a794511b85e1a03f1c613006c2b6439b3f (diff) | |
Fix broken Qt prefix for conda installs
If PySide6 is installed through Anaconda, it will conflict with
Anaconda's own Qt package, which is based on Qt 5, creating a version
mismatch. To work around this, if PySide runs in a conda env, register
an internal qt.conf setting the prefix value to the corresponding path
in site-packages.
Pick-to: 6.4
Change-Id: I5639d7eeaf524a8a4aa533dc5a83bdb0c74cbd9f
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside6/libpyside')
| -rw-r--r-- | sources/pyside6/libpyside/pyside.cpp | 10 | ||||
| -rw-r--r-- | sources/pyside6/libpyside/pysideinit.h | 3 |
2 files changed, 12 insertions, 1 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp index 34c4e3955..1ab5e337e 100644 --- a/sources/pyside6/libpyside/pyside.cpp +++ b/sources/pyside6/libpyside/pyside.cpp @@ -827,12 +827,20 @@ bool registerInternalQtConf() maybeQtConfPath = QDir::toNativeSeparators(maybeQtConfPath); bool executableQtConfAvailable = QFileInfo::exists(maybeQtConfPath); + QString maybeQt6ConfPath = QDir(appDirPath).filePath(u"qt6.conf"_s); + maybeQt6ConfPath = QDir::toNativeSeparators(maybeQt6ConfPath); + bool executableQt6ConfAvailable = QFileInfo::exists(maybeQt6ConfPath); + // Allow disabling the usage of the internal qt.conf. This is necessary for tests to work, // because tests are executed before the package is installed, and thus the Prefix specified // in qt.conf would point to a not yet existing location. bool disableInternalQtConf = qEnvironmentVariableIntValue("PYSIDE_DISABLE_INTERNAL_QT_CONF") > 0; - if (disableInternalQtConf || executableQtConfAvailable) { + bool runsInConda = + qEnvironmentVariableIsSet("CONDA_DEFAULT_ENV") || qEnvironmentVariableIsSet("CONDA_PREFIX"); + + if (!runsInConda && (disableInternalQtConf || executableQtConfAvailable) || + runsInConda && executableQt6ConfAvailable) { registrationAttempted = true; return false; } diff --git a/sources/pyside6/libpyside/pysideinit.h b/sources/pyside6/libpyside/pysideinit.h index 3a8f20158..c623a0d27 100644 --- a/sources/pyside6/libpyside/pysideinit.h +++ b/sources/pyside6/libpyside/pysideinit.h @@ -17,6 +17,9 @@ PYSIDE_API void init(PyObject *module); /// /// This is used in a standalone build, to inform QLibraryInfo of the Qt prefix /// (where Qt libraries are installed) so that plugins can be successfully loaded. +/// +/// This is also used if PySide runs from inside a conda environment to solve +/// conflicts with the qt.conf installed by Anaconda Qt packages. PYSIDE_API bool registerInternalQtConf(); } //namespace PySide |
