我安装了两个版本的python,但cmake使用的是旧版本,如何强制cmake使用新版本?

izj3ouym  于 2023-10-20  发布在  Python
关注(0)|答案(6)|浏览(254)

我安装了两个版本的python,但是cmake使用的是旧版本。如何强制cmake使用新版本?

huus2vyu

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)
mfuanj7w

mfuanj7w2#

尝试添加-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7这可能是一个路径问题?
也可以指定python库的路径,使用你想要的版本:

cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
3xiyfsfu

3xiyfsfu3#

我也遇到过类似的问题,并使用Paul's answer作为提示解决了它。我需要使用python2.7来编译一个旧的库,但是cmake一直在使用我的python3.2库(和可执行文件)。
首先,我使用默认选项运行cmake,然后编辑它生成的CMakeCache.txt文件。我这样做主要是因为我不知道正确的-D...咒语,使cmake获得python库,并包括路径等放在首位。
在我的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,因为在我的系统上,pythonpython3.2的符号链接。
然后我重新运行cmake。因为它更喜欢缓存的值而不是实际查找库,所以这应该在所有情况下都有效。至少在我心里是这样的

wbgh16ku

wbgh16ku4#

我用的是anaconda(python 2.7.8)和python 2.7.6。
我试过-DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin,但发现版本1.4(奇怪:)。
我的解决方案是将其更改为PYTHON_EXECUTABLE:

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
wecizke3

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的所有已安装版本。

50pmv0ei

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" `

相关问题