Skip to content

Commit b167e96

Browse files
authored
Add option to use virtual environment for Python. (#1029)
Needed if you have an externally managed Python implementation such as when installed on Linux by apt.
1 parent e691019 commit b167e96

1 file changed

Lines changed: 35 additions & 5 deletions

File tree

interface/python_binding/CMakeLists.txt

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,61 @@
22
# Copyright 2023 Shukant Pal
33
# SPDX-License-Identifier: Apache-2.0
44

5+
option( KTX_PY_USE_VENV
6+
"Use a Python virtual environment. Needed for externally managed python installations."
7+
OFF
8+
)
9+
510
find_package (Python3 COMPONENTS Interpreter)
611
set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/interface/python_binding)
712
file(GLOB pyktx_py_src ${SOURCE_DIR}/pyktx/*.py)
813
list(TRANSFORM pyktx_py_src REPLACE "${SOURCE_DIR}/pyktx/" "${KTX_BUILD_DIR}/interface/python_binding/docs/pyktx." OUTPUT_VARIABLE pyktx_py_rst_filenames)
914
list(TRANSFORM pyktx_py_rst_filenames REPLACE ".py$" ".rst" OUTPUT_VARIABLE pyktx_py_rst)
1015

11-
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
16+
set(PYTHON_EXECUTABLE_SYSTEM ${Python3_EXECUTABLE})
1217
if(DEFINED PYTHON AND NOT ${PYTHON} STREQUAL "")
13-
set(PYTHON_EXECUTABLE ${PYTHON})
18+
set(PYTHON_EXECUTABLE_SYSTEM ${PYTHON})
1419
message(STATUS "Override PYTHON with ${PYTHON}")
1520
endif()
1621
if (LINUX AND NOT Python3_FOUND)
17-
set(PYTHON_EXECUTABLE python)
22+
set(PYTHON_EXECUTABLE_SYSTEM python)
1823
message(STATUS "CMake failed to find python3. Will continue assuming it's on PATH")
1924
endif()
25+
if(KTX_PY_USE_VENV)
26+
set(PYTHON_VENV_DIR "${KTX_BUILD_DIR}/interface/python_binding")
27+
set(PYTHON_EXECUTABLE ${PYTHON_VENV_DIR}/bin/python3)
28+
message(STATUS "Using virtual environment for Python")
29+
else()
30+
set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE_SYSTEM})
31+
endif()
2032

2133
# Convert Windows path to CMake path
2234
cmake_path(SET PYTHON_PATH ${PYTHON_EXECUTABLE})
2335

2436
set(LIBKTX_LIB_DIR ${KTX_BUILD_DIR}/$<CONFIG>)
2537

38+
if(KTX_PY_USE_VENV)
39+
add_custom_target( py-venv ALL
40+
COMMENT
41+
"Set up virtual environment for Python"
42+
)
43+
add_custom_command(
44+
TARGET py-venv
45+
PRE_BUILD
46+
COMMAND
47+
${PYTHON_EXECUTABLE_SYSTEM} -m venv ${PYTHON_VENV_DIR}
48+
COMMENT
49+
"Create virtual environment for Python"
50+
)
51+
endif()
52+
2653
add_custom_target( pyktx-deps ALL
2754
COMMENT
28-
"Python deps")
29-
55+
"Python deps"
56+
)
57+
if(KTX_PY_USE_VENV)
58+
add_dependencies(pyktx-deps py-venv)
59+
endif()
3060
add_custom_command(
3161
TARGET pyktx-deps
3262
PRE_BUILD

0 commit comments

Comments
 (0)