#c #python-3.x #macos #python-2.7 #cmake
#c #python-3.x #macos #python-2.7 #cmake
Вопрос:
Я пытаюсь создать «Плагин» C , который является частью «Orthanc» (проект с открытым исходным кодом). Я делал это как в UBUNTU, так и в OS X, но у меня возникли проблемы с использованием версии Python, отличной от установленной в системе версии (High Sierra, Python 2.7) в OS X. Я попытался установить Python 3.8, используя пакет OS X с веб-сайта Python, а также используя HomeBrew. Я не очень хорошо знаком с компиляцией OS X, но немного лучше разбираюсь в UNIX.
В CMakeLists.txt файл довольно длинный, но соответствующие части, вероятно,:
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
# The Python version cannot be controlled on OS X (yet)
set(PYTHON_VERSION "3.6" CACHE STRING "Version of Python to be used")
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
find_package(PythonLibs)
if (NOT PYTHONLIBS_FOUND)
message(FATAL_ERROR "Cannot find the Python libraries")
endif()
message("Python library - Found version: ${PYTHONLIBS_VERSION_STRING}")
message("Python library - Path to include directory: ${PYTHON_INCLUDE_DIRS}")
message("Python library - Shared library: ${PYTHON_LIBRARIES}")
В фактической сборке есть несколько строк вывода о Python. CLI для сборки — это:
cmake -DPYTHON_VERSION=3.8 -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release ../
хотя я пробовал разные варианты для версии 3.8, но по умолчанию всегда возвращается значение 2.7.
-- Found PythonInterp: /usr/bin/python (found version "2.7.16")
-- Found PythonLibs: /usr/lib/libpython2.7.dylib (found version "2.7.16")
Python library - Found version: 2.7.16
Python library - Path to include directory: /usr/include/python2.7
Python library - Shared library: /usr/lib/libpython2.7.dylib
-- Configuring done
CMake Warning (dev):
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake
--help-policy CMP0042" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
MACOSX_RPATH is not specified for the following targets:
Мой файл .bash_profile, вероятно, испорчен, но это самая последняя версия. Я установил как версию 3.8 с помощью brew, так и версию из .pkg на веб-сайте Python.
source ~/.profile
export NVM_DIR="/Users/sscotti/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] amp;amp; . "$NVM_DIR/nvm.sh" # This loads nvm
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"
# The version installed with HomeBrew
# export PATH="/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/Cellar/python@3.8/3.8.5/bin:$PATH"
# The version installed with OS X installer
# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"
##
# Homebrew bash completion
##
if [ -f $(brew --prefix)/etc/bash_completion ]; then
source $(brew --prefix)/etc/bash_completion
fi
Кажется, что, возможно:
find_package(PythonLibs)
не удается найти мою другую версию Python?
Любые предложения приветствуются.
Только начинаю с Python, и это немного сбивает с толку, как настроить пару разных версий Python для целей разработки. Я не знаю, включены ли в версию Python brew или .pkg «пакеты разработки».
Комментарии:
1. Документация для модуля FindPythonLibs не описывает
PYTHON_VERSION
переменную как возможный способ повлиять на поиск. Если вы хотите выбрать конкретную установку Python, установите соответствующие переменныеPYTHON_LIBRARY
иPYTHON_INCLUDE_DIR
. Кроме того, в документации говорится, чтоFindPythonLibs
модуль устарел в пользуFindPython
и некоторых других модулей.
Ответ №1:
Просто продолжение моего вопроса. Я обнаружил, что если я явно определил эти пути для -DPYTHON_LIBRARY= и -DPYTHON_INCLUDE_DIR в cmake, то он отлично компилируется, и я могу использовать различные версии Python в OS X, если захочу. Я бы предположил, что есть другой, более элегантный способ, но это работает довольно хорошо.
cmake -DPYTHON_LIBRARY=/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/libpython3.8.dylib -DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/include/python3.8/ -DPYTHON_VERSION=3.8 -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release ../