aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside
diff options
context:
space:
mode:
authorAdrian Herrmann <adrian.herrmann@qt.io>2023-02-07 17:04:54 +0100
committerAdrian Herrmann <adrian.herrmann@qt.io>2023-02-14 13:13:35 +0100
commit06e7cb7d61e6ef7bbd073b85cbf8d5e324e242c6 (patch)
tree71315845d60e0dbdd5de070153e740d65d9d4014 /sources/pyside6/libpyside
parente74125a794511b85e1a03f1c613006c2b6439b3f (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.cpp10
-rw-r--r--sources/pyside6/libpyside/pysideinit.h3
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