diff --git a/Applications/ApplicationsLib/CMakeLists.txt b/Applications/ApplicationsLib/CMakeLists.txt
index dd3feb419ba09ecd7b051efd7f62f0f16b8753e6..e446674da71a1d67ac88933d621a4b316da444bc 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 5e45b588975f7d28c04f9fd285bea47a214110ff..81703eace73cb69df404e3f6444e30a2b80c7815 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 bc28b2a72ae07c26e7f2724a2579faa0f2e2397a..77d6c8260487a24b253c85499747950d4aa6f05a 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 6933e19f770d241fb22867920f580718d29a0055..128a1e31c5ee6392d692ae7e393a8eda664ead4e 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