aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scriptableapplication/pythonutils.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-03-06 18:10:17 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-03-06 18:10:17 +0100
commitb94112ea6c60ed9a4990bcfe4a8ad0a96e90aecd (patch)
tree60417ebf06b1e4ec63fb8fccac2ac0e4070917f0 /examples/scriptableapplication/pythonutils.cpp
parenta7d32524b22fd8ac491d0624d91d828593936d6e (diff)
parent6baf94735ff683adb4233825a8b0adbd68e9ed8a (diff)
Merge remote-tracking branch 'origin/5.14' into 5.15
Diffstat (limited to 'examples/scriptableapplication/pythonutils.cpp')
-rw-r--r--examples/scriptableapplication/pythonutils.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/examples/scriptableapplication/pythonutils.cpp b/examples/scriptableapplication/pythonutils.cpp
index f546a5a6c..c5e18f256 100644
--- a/examples/scriptableapplication/pythonutils.cpp
+++ b/examples/scriptableapplication/pythonutils.cpp
@@ -53,6 +53,7 @@
#include <QtCore/QByteArray>
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
+#include <QtCore/QOperatingSystemVersion>
#include <QtCore/QStringList>
#include <QtCore/QTemporaryFile>
#include <QtCore/QDir>
@@ -87,15 +88,30 @@ static void cleanup()
}
}
+static const char virtualEnvVar[] = "VIRTUAL_ENV";
+
+// If there is an active python virtual environment, use that environment's
+// packages location.
+static void initVirtualEnvironment()
+{
+ QByteArray virtualEnvPath = qgetenv(virtualEnvVar);
+ // As of Python 3.8, Python is no longer able to run stand-alone in a
+ // virtualenv due to missing libraries. Add the path to the modules instead.
+ if (QOperatingSystemVersion::currentType() == QOperatingSystemVersion::Windows
+ && (PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8))) {
+ qputenv("PYTHONPATH", virtualEnvPath + "\\Lib\\site-packages");
+ } else {
+ qputenv("PYTHONHOME", virtualEnvPath);
+ }
+}
+
State init()
{
if (state > PythonUninitialized)
return state;
- // If there is an active python virtual environment, use that environment's packages location.
- QByteArray virtualEnvPath = qgetenv("VIRTUAL_ENV");
- if (!virtualEnvPath.isEmpty())
- qputenv("PYTHONHOME", virtualEnvPath);
+ if (qEnvironmentVariableIsSet(virtualEnvVar))
+ initVirtualEnvironment();
Py_Initialize();
qAddPostRoutine(cleanup);