diff --git a/CMakeLists.txt b/CMakeLists.txt
index 67d258f21ad..4199cd5c1a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -485,6 +485,7 @@ if(WITH_MGR)
   set(MGR_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
   set(MGR_PYTHON_LIBRARIES ${PYTHON_LIBRARIES})
   set(MGR_PYTHON_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
+  set(MGR_PYTHON_VERSION_MINOR ${PYTHON_VERSION_MINOR})
   # Boost dependency check deferred to Boost section
 endif(WITH_MGR)
 
@@ -597,7 +598,8 @@ set(BOOST_COMPONENTS
 set(BOOST_HEADER_COMPONENTS container)
 
 if(WITH_MGR)
-	list(APPEND BOOST_COMPONENTS python)
+  list(APPEND BOOST_COMPONENTS
+    python${MGR_PYTHON_VERSION_MAJOR}${MGR_PYTHON_VERSION_MINOR})
 endif()
 if(WITH_BOOST_CONTEXT)
   list(APPEND BOOST_COMPONENTS context coroutine)
diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake
index 1ed21cb896e..f46cc0d4853 100644
--- a/cmake/modules/BuildBoost.cmake
+++ b/cmake/modules/BuildBoost.cmake
@@ -65,9 +65,20 @@ function(do_build_boost version)
   set(BOOST_CXXFLAGS "-fPIC -w") # check on arm, etc <---XXX
   list(APPEND boost_features "cxxflags=${BOOST_CXXFLAGS}")
 
-  list(FIND Boost_BUILD_COMPONENTS "python" with_python)
-  list_replace(Boost_BUILD_COMPONENTS "unit_test_framework" "test")
-  string(REPLACE ";" "," boost_with_libs "${Boost_BUILD_COMPONENTS}")
+  set(boost_with_libs)
+  foreach(c ${Boost_BUILD_COMPONENTS})
+    if(c MATCHES "^python([0-9])\$")
+      set(with_python_version "${CMAKE_MATCH_1}")
+      list(APPEND boost_with_libs "python")
+    elseif(c MATCHES "^python([0-9])\\.?([0-9])\$")
+      set(with_python_version "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}")
+      list(APPEND boost_with_libs "python")
+    else()
+      list(APPEND boost_with_libs ${c})
+    endif()
+  endforeach()
+  list_replace(boost_with_libs "unit_test_framework" "test")
+  string(REPLACE ";" "," boost_with_libs "${boost_with_libs}")
   # build b2 and prepare the project-config.jam for boost
   set(configure_command
     ./bootstrap.sh --prefix=<INSTALL_DIR>
@@ -97,12 +108,12 @@ function(do_build_boost version)
     " : "
     " : ${CMAKE_CXX_COMPILER}"
     " ;\n")
-  if(with_python GREATER -1)
-    set(python_ver ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
+  if(with_python_version)
+    find_package(PythonLibs ${with_python_version} QUIET REQUIRED)
     string(REPLACE ";" " " python_includes "${PYTHON_INCLUDE_DIRS}")
     file(APPEND ${user_config}
       "using python"
-      " : ${python_ver}"
+      " : ${with_python_version}"
       " : ${PYTHON_EXECUTABLE}"
       " : ${python_includes}"
       " : ${PYTHON_LIBRARIES}"
@@ -111,12 +122,8 @@ function(do_build_boost version)
   list(APPEND b2 --user-config=${user_config})
 
   list(APPEND b2 toolset=${toolset})
-  if(with_python GREATER -1)
-    if(NOT PYTHONLIBS_FOUND)
-      message(FATAL_ERROR "Please call find_package(PythonLibs) first for building "
-        "Boost.Python")
-    endif()
-    list(APPEND b2 python=${python_ver})
+  if(with_python_version)
+    list(APPEND b2 python=${with_python_version})
   endif()
 
   set(build_command
@@ -197,17 +204,15 @@ macro(build_boost version)
       add_library(Boost::${c} SHARED IMPORTED)
     endif()
     add_dependencies(Boost::${c} Boost)
-    if(c STREQUAL python)
-      set(buildid "${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}")
-    else()
-      set(buildid "")
+    if(c MATCHES "^python")
+      set(c "python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}")
     endif()
     if(Boost_USE_STATIC_LIBS)
       set(Boost_${upper_c}_LIBRARY
-        ${install_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${c}${buildid}${CMAKE_STATIC_LIBRARY_SUFFIX})
+        ${install_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${c}${CMAKE_STATIC_LIBRARY_SUFFIX})
     else()
       set(Boost_${upper_c}_LIBRARY
-        ${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}boost_${c}${buildid}${CMAKE_SHARED_LIBRARY_SUFFIX})
+        ${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}boost_${c}${CMAKE_SHARED_LIBRARY_SUFFIX})
     endif()
     unset(buildid)
     set_target_properties(Boost::${c} PROPERTIES
diff --git a/src/mgr/CMakeLists.txt b/src/mgr/CMakeLists.txt
index 3ed9a960d51..925d02d0f99 100644
--- a/src/mgr/CMakeLists.txt
+++ b/src/mgr/CMakeLists.txt
@@ -24,7 +24,8 @@ target_include_directories(ceph-mgr SYSTEM PRIVATE "${PYTHON_INCLUDE_DIRS}")
 target_link_libraries(ceph-mgr
   osdc client heap_profiler
   global-static ceph-common
-  Boost::python ${MGR_PYTHON_LIBRARIES} ${CMAKE_DL_LIBS})
+  Boost::python${MGR_PYTHON_VERSION_MAJOR}${MGR_PYTHON_VERSION_MINOR}
+  ${MGR_PYTHON_LIBRARIES} ${CMAKE_DL_LIBS})
 set_target_properties(ceph-mgr PROPERTIES
   POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE})
 install(TARGETS ceph-mgr DESTINATION bin)