From 435bc2744cd108efc1511bf17117bd4f0de15b43 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 2 Mar 2020 13:00:56 +0100 Subject: 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 --- examples/scriptableapplication/pythonutils.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'examples/scriptableapplication') 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 #include #include +#include #include #include #include @@ -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); -- cgit v1.2.3