From 3ee1008adf5e3646ea76a501f9506379bb86ada2 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Wed, 30 Sep 2020 11:30:24 +0200
Subject: [PATCH] [CMake] Add Python's venv site-packages path to runtime
 interpreter

---
 Applications/ApplicationsLib/CMakeLists.txt  |  3 ++-
 Applications/ApplicationsLib/ProjectData.cpp | 12 ++++++++----
 InfoLib/CMakeInfo.cpp.in                     |  1 +
 InfoLib/CMakeInfo.h                          |  1 +
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/Applications/ApplicationsLib/CMakeLists.txt b/Applications/ApplicationsLib/CMakeLists.txt
index dd3feb419ba..e446674da71 100644
--- a/Applications/ApplicationsLib/CMakeLists.txt
+++ b/Applications/ApplicationsLib/CMakeLists.txt
@@ -7,7 +7,8 @@ ogs_add_library(ApplicationsLib ${LIB_SOURCES})
 
 target_link_libraries(ApplicationsLib
                       PUBLIC BaseLib GeoLib NumLib Processes
-                      PRIVATE MathLib
+                      PRIVATE CMakeInfoLib
+                              MathLib
                               MeshLib
                               MeshGeoToolsLib
                               ParameterLib
diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 5e45b588975..81703eace73 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -15,7 +15,6 @@
 
 #include <algorithm>
 #include <cctype>
-#include "BaseLib/Logging.h"
 #include <set>
 
 #ifdef OGS_USE_PYTHON
@@ -25,8 +24,10 @@
 #include "BaseLib/Algorithm.h"
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/FileTools.h"
+#include "BaseLib/Logging.h"
 #include "BaseLib/StringTools.h"
 #include "GeoLib/GEOObjects.h"
+#include "InfoLib/CMakeInfo.h"
 #include "MaterialLib/MPL/CreateMedium.h"
 #include "MathLib/Curve/CreatePiecewiseLinearCurve.h"
 #include "MeshGeoToolsLib/ConstructMeshesFromGeometries.h"
@@ -275,9 +276,12 @@ ProjectData::ProjectData(BaseLib::ConfigTree const& project_config,
 #ifdef OGS_USE_PYTHON
         namespace py = pybind11;
 
-        // Append project's directory to python's module search path.
-        py::module::import("sys").attr("path").attr("append")(
-            project_directory);
+        // Append to python's module search path
+        auto py_path = py::module::import("sys").attr("path");
+        py_path.attr("append")(project_directory);  // .prj directory
+        // virtualenv
+        py_path.attr("append")(
+            CMakeInfoLib::CMakeInfo::python_virtualenv_sitepackages);
 
         auto const script_path =
             BaseLib::copyPathToFileName(*python_script, project_directory);
diff --git a/InfoLib/CMakeInfo.cpp.in b/InfoLib/CMakeInfo.cpp.in
index bc28b2a72ae..77d6c826048 100644
--- a/InfoLib/CMakeInfo.cpp.in
+++ b/InfoLib/CMakeInfo.cpp.in
@@ -17,6 +17,7 @@ namespace CMakeInfoLib
 
 namespace CMakeInfo
 {
+    const std::string python_virtualenv_sitepackages("@Python3_VIRTUALENV_SITEPACKAGES@");
     const std::string cmake_args("@CMAKE_ARGS_ESCAPED@");
 }
 }
diff --git a/InfoLib/CMakeInfo.h b/InfoLib/CMakeInfo.h
index 6933e19f770..128a1e31c5e 100644
--- a/InfoLib/CMakeInfo.h
+++ b/InfoLib/CMakeInfo.h
@@ -21,6 +21,7 @@ namespace CMakeInfoLib
 
 namespace CMakeInfo
 {
+    extern CMAKEINFOLIB_EXPORT const std::string python_virtualenv_sitepackages;
     extern CMAKEINFOLIB_EXPORT const std::string cmake_args;
 }  // namespace
 }  // namespace
-- 
GitLab