mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 15:18:26 -05:00
FindPython: Extend virtual environment handling by considering conda
- Add functionality to recognize and use CONDA_PREFIX environment variable - Add tests for conda virtual environments - Fixes: #20111
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
|
||||
project(TestVirtualEnvConda LANGUAGES NONE)
|
||||
|
||||
include(CTest)
|
||||
|
||||
find_program(CONDA_EXECUTABLE conda)
|
||||
if (CONDA_EXECUTABLE EQUAL NOTFOUND)
|
||||
message (FATAL_ERROR "Fail to found Conda")
|
||||
endif()
|
||||
|
||||
set (Python3_VIRTUAL_ENV "${CMAKE_CURRENT_BINARY_DIR}/condaenv")
|
||||
|
||||
execute_process (COMMAND "${CONDA_EXECUTABLE}" create --no-default-packages --prefix "${Python3_VIRTUAL_ENV}" --yes python=3
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE outputs
|
||||
ERROR_VARIABLE outputs)
|
||||
if (result)
|
||||
message (FATAL_ERROR "Fail to create virtual environment: ${outputs}")
|
||||
endif()
|
||||
|
||||
add_test(NAME FindPython3.VirtualEnvDefaultConda
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
|
||||
--unset=VIRTUAL_ENV
|
||||
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
|
||||
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvDefault.cmake")
|
||||
|
||||
add_test(NAME FindPython3.VirtualEnvOnlyConda
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
|
||||
--unset=VIRTUAL_ENV
|
||||
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
|
||||
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
|
||||
add_test(NAME FindPython3.UnsetVirtualEnvOnlyConda
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
|
||||
--unset=CONDA_PREFIX
|
||||
--unset=VIRTUAL_ENV
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
|
||||
|
||||
add_test(NAME FindPython3.VirtualEnvStandardConda
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
|
||||
--unset=VIRTUAL_ENV
|
||||
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
|
||||
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvStandard.cmake")
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
find_package (Python3 REQUIRED)
|
||||
|
||||
if (NOT Python3_EXECUTABLE MATCHES "^${PYTHON3_VIRTUAL_ENV}/.+")
|
||||
message (FATAL_ERROR "Fail to use virtual environment")
|
||||
endif()
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
#
|
||||
# Virtual environment is defined for python3
|
||||
# Trying to find a python2 using only virtual environment
|
||||
# It is expecting to fail if a virtual environment is active and to success otherwise.
|
||||
#
|
||||
set (Python2_FIND_VIRTUALENV ONLY)
|
||||
find_package (Python2 QUIET)
|
||||
|
||||
if (PYTHON3_VIRTUAL_ENV AND Python2_FOUND)
|
||||
message (FATAL_ERROR "Python2 unexpectedly found.")
|
||||
endif()
|
||||
|
||||
if (NOT PYTHON3_VIRTUAL_ENV AND NOT Python2_FOUND)
|
||||
message (FATAL_ERROR "Fail to find Python2.")
|
||||
endif()
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
set (Python3_FIND_VIRTUALENV STANDARD)
|
||||
find_package (Python3 REQUIRED)
|
||||
|
||||
if (Python3_EXECUTABLE MATCHES "^${PYTHON3_VIRTUAL_ENV}/.+")
|
||||
message (FATAL_ERROR "Python3 virtual env unexpectedly found.")
|
||||
endif()
|
||||
Reference in New Issue
Block a user