我安装了两个版本的python,但是cmake使用的是旧版本。如何强制cmake使用新版本?
huus2vyu1#
你可以根据你的需要来尝试其中的任何一个:
CMake >= 3.12
根据Changelog:新的“FindPython3”和“FindPython2”模块,以及新的“FindPython”模块,被添加以提供新的定位方式python环境
find_package(Python COMPONENTS Interpreter Development)
密码:
这个模块看起来更适合Python版本3。如果找不到,则搜索版本2。要管理Python的并发版本3和2,请使用FindPython3和FindPython2模块,而不是这个模块。
CMake < 3.12
Docs:
find_package(PythonInterp 2.7 REQUIRED) find_package(PythonLibs 2.7 REQUIRED)
mfuanj7w2#
尝试添加-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7这可能是一个路径问题?也可以指定python库的路径,使用你想要的版本:
-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7
cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
3xiyfsfu3#
我也遇到过类似的问题,并使用Paul's answer作为提示解决了它。我需要使用python2.7来编译一个旧的库,但是cmake一直在使用我的python3.2库(和可执行文件)。首先,我使用默认选项运行cmake,然后编辑它生成的CMakeCache.txt文件。我这样做主要是因为我不知道正确的-D...咒语,使cmake获得python库,并包括路径等放在首位。在我的CmakeCache.txt中,我发现了这样的行
python2.7
cmake
python3.2
CMakeCache.txt
-D...
CmakeCache.txt
PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
PYTHON_INCLUDE_DIR:PATH=/usr/include/python3.2
PYTHON_LIBRARY:FILEPATH=/usr/lib/libpython3.2.so
并将所有出现的python3.2替换为python2.7。我还必须将PYTHON_EXECUTABLE重命名为python2.7,因为在我的系统上,python是python3.2的符号链接。然后我重新运行cmake。因为它更喜欢缓存的值而不是实际查找库,所以这应该在所有情况下都有效。至少在我心里是这样的
PYTHON_EXECUTABLE
python
wbgh16ku4#
我用的是anaconda(python 2.7.8)和python 2.7.6。我试过-DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin,但发现版本1.4(奇怪:)。我的解决方案是将其更改为PYTHON_EXECUTABLE:
-DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON \ -DPYTHON_LIBRARY=$ANACONDA_HOME/lib/libpython2.7.so \ -DPYTHON_INCLUDE_DIR=$ANACONDA_HOME/include/python2.7/ \ -DPYTHON_EXECUTABLE=$ANACONDA_HOME/bin/python
wecizke35#
我的用例是一个相当大的项目,其中C++类通过Boost.Python可用于Python脚本。在与CMake的Python解释器和库检测的各种怪癖作斗争之后,我终于放弃了,推出了自己的。我的方法是基于python-config脚本的一个稍微经过编辑的版本,即 * 有时 *(但不总是!))放入新创建的虚拟环境中(有关这些问题,请参阅pyvenv上的SO帖子,但我离题了)。这个脚本由一个小的CMake代码段pyconfig.cmake调用。两者都可以从GitHub repo cmake-python-config免费获得。警告:这些脚本假设您的PATH中有一个Python 3解释器。没有尝试检测Python 2。这些脚本也不会尝试查找Python3的所有已安装版本。
Boost.Python
python-config
pyvenv
pyconfig.cmake
PATH
50pmv0ei6#
在我的windows平台上,像下面这样,unix应该是类似的:
-DPython3_EXECUTABLE="C:\Users\xx\AppData\Local\Programs\Python\Python310\python.exe" ` -DPython3_LIBRARY="C:\Users\xx\AppData\Local\Programs\Python\Python310\libs\python310.lib" ` -DPython3_INCLUDE_DIR="C:\Users\xx\AppData\Local\Programs\Python\Python310\Include" `
6条答案
按热度按时间huus2vyu1#
你可以根据你的需要来尝试其中的任何一个:
对于
CMake >= 3.12
根据Changelog:
新的“FindPython3”和“FindPython2”模块,以及新的
“FindPython”模块,被添加以提供新的定位方式
python环境
密码:
这个模块看起来更适合Python版本3。如果找不到,则搜索版本2。要管理Python的并发版本3和2,请使用FindPython3和FindPython2模块,而不是这个模块。
对于
CMake < 3.12
Docs:
mfuanj7w2#
尝试添加
-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7
这可能是一个路径问题?也可以指定python库的路径,使用你想要的版本:
3xiyfsfu3#
我也遇到过类似的问题,并使用Paul's answer作为提示解决了它。我需要使用
python2.7
来编译一个旧的库,但是cmake
一直在使用我的python3.2
库(和可执行文件)。首先,我使用默认选项运行
cmake
,然后编辑它生成的CMakeCache.txt
文件。我这样做主要是因为我不知道正确的-D...
咒语,使cmake
获得python库,并包括路径等放在首位。在我的
CmakeCache.txt
中,我发现了这样的行并将所有出现的
python3.2
替换为python2.7
。我还必须将PYTHON_EXECUTABLE
重命名为python2.7
,因为在我的系统上,python
是python3.2
的符号链接。然后我重新运行
cmake
。因为它更喜欢缓存的值而不是实际查找库,所以这应该在所有情况下都有效。至少在我心里是这样的wbgh16ku4#
我用的是anaconda(python 2.7.8)和python 2.7.6。
我试过
-DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin
,但发现版本1.4(奇怪:)。我的解决方案是将其更改为PYTHON_EXECUTABLE:
wecizke35#
我的用例是一个相当大的项目,其中C++类通过
Boost.Python
可用于Python脚本。在与CMake的Python解释器和库检测的各种怪癖作斗争之后,我终于放弃了,推出了自己的。我的方法是基于python-config
脚本的一个稍微经过编辑的版本,即 * 有时 *(但不总是!))放入新创建的虚拟环境中(有关这些问题,请参阅pyvenv
上的SO帖子,但我离题了)。这个脚本由一个小的CMake代码段pyconfig.cmake
调用。两者都可以从GitHub repo cmake-python-config免费获得。警告:这些脚本假设您的
PATH
中有一个Python 3解释器。没有尝试检测Python 2。这些脚本也不会尝试查找Python3的所有已安装版本。50pmv0ei6#
在我的windows平台上,像下面这样,unix应该是类似的: