diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-02 13:00:56 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-03-04 11:19:12 +0100 |
commit | 435bc2744cd108efc1511bf17117bd4f0de15b43 (patch) | |
tree | dd5a91931b8ad7924486b67c4872ec8dc724a3c3 | |
parent | cc19c439a64ddc42bc333ee5df7b651a789d6da5 (diff) |
Fix running scriptableapplication in a virtualenv on Windows with Python 3.8
As of Python 3.8, Python is no longer is able to run stand-alone
in a virtualenv due to missing libraries. Add the path to the
modules instead.
Task-number: PYSIDE-1236
Change-Id: I4ef1f02925d11900d35cc4e5fcc9f50a5e123c2f
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-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); |