Integrating with CMake
Once installed, the package integration within a CMake project can be done using the find_package function:
find_package(Pytest)
A specific range of versions can be targeted:
# Request Pytest version 7.2.0.
find_package(Pytest 7.2.0 EXACT REQUIRED)
# Request Pytest between version 6.0.0 and 7.2.0 included.
find_package(Pytest 6.0.0...7.2.0 REQUIRED)
# Request any version of Pytest over 4.6.11.
find_package(Pytest 4.6.11 REQUIRED)
Finding Configuration
When Python is used from its standard system location, CMake should be able to discover the newly installed configuration automatically using its Config Mode Search Procedure.
Warning
The CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH option should not be set to False.
When using a Python virtual environment, or if Python is installed in a
non-standard location, the CMAKE_PREFIX_PATH
environment variable
(or CMake option) can be used to guide the discovery process:
cmake -S . -B ./build -D "CMAKE_PREFIX_PATH=/path/to/python/prefix"
This is also necessary when installing the configuration in the Python user directory:
pip install pytest-cmake --user
Building and testing example project
An example project has been made available to test the configuration.
Ensure that nanobind is available, and install Pytest with its CMake configuration as described in the previous section. Then build the example:
export nanobind_ROOT=$(python -m nanobind --cmake_dir)
cmake -S ./example -B ./build
cmake --build ./build
Finally, run the tests as follows:
ctest --test-dir ./build -VV
Finding Module
The package integration within a CMake project can also be done using
the FindPytest.cmake
module. The CMake files can be copied into a
new project, or the following code can be added before invoking the
find_package function:
set(pytest_url https://github.com/python-cmake/pytest-cmake/archive/main.zip)
# Fetch CMake files from the main branch of the Github repository
file(DOWNLOAD ${pytest_url} ${CMAKE_BINARY_DIR}/pytest.zip)
file(
ARCHIVE_EXTRACT INPUT ${CMAKE_BINARY_DIR}/pytest.zip
DESTINATION ${CMAKE_BINARY_DIR}
PATTERNS "*.cmake"
)
# Expand the module path variable to discover the `FindPytest.cmake` module.
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/pytest-cmake-main/cmake)
Warning
It is strongly recommended to use the Pip installation over this method.