diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-06 18:10:17 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-06 18:10:17 +0100 |
| commit | b94112ea6c60ed9a4990bcfe4a8ad0a96e90aecd (patch) | |
| tree | 60417ebf06b1e4ec63fb8fccac2ac0e4070917f0 /examples/scriptableapplication/pythonutils.cpp | |
| parent | a7d32524b22fd8ac491d0624d91d828593936d6e (diff) | |
| parent | 6baf94735ff683adb4233825a8b0adbd68e9ed8a (diff) | |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: I116f2abfda7263fac8a31ffbe8fc82bfa0cbc618
Diffstat (limited to 'examples/scriptableapplication/pythonutils.cpp')
| -rw-r--r-- | examples/scriptableapplication/pythonutils.cpp | 24 |
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); |
