aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scriptableapplication
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scriptableapplication')
-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);