如何使用 CMake 使用 Python 的 2 个不同版本
How to use 2 differents version of Python using CMake
上下文:
我正在构建一个 CMake 项目。此 CMake 项目 运行 位于 docker 容器内,使用 CLion 远程开发以便直接在 docker 中开发我的代码。因此所有 headers 和 lib 都在 docker.
中
现在,因为我的项目分为几个部分,所以我有一个 "main" CMakelists.txt 调用下面的部分,如下所示:
--- CMakelists.txt
-------- Project_part1
--------------CMakelists.txt
-------- Project_part2
--------------CMakelists.txt
-------- Project_part3
--------------CMakelists.txt
注意:单独构建它们中的每一个都可以正常工作。
事实是,Project_part3 需要 Python2 作为解释器。但是上面那个(part1,part2)需要Python3.
仅包含 Project_part1 和 Project_part2 时,它通常在 CLion 上构建。
当仅包含 Project_part3 时,它通常在 CLion 上构建。
要定义在构建过程中将使用哪个 Python 版本,使用并设置一些环境:
ROS_PYTHON_VERSION
PYTHON_EXECUTABLE
Part_1 和 Part_2 需要 ROS_PYTHON_VERSION = 3 和 PYTHON_EXECUTABLE = /usr/bin/python3
Part_2 需要 ROS_PYTHON_VERSION = 2 和 PYTHON_EXECUTABLE = /usr/bin/python2
但是发生的事情是第一个得到 include/build 似乎 强制 之后的那个使用它使用的 Python 版本。
我尝试的是(伪cmake代码):
set_env_var_for_part1_part2
include_part1_part2
-> 正确构建 CLion。
set_env_var_for_3
set_env_var_for_part1_part2
include_part1_part2
-> 正确构建 CLion。
set_env_var_for_part1_part2
set_env_var_for_3
include_part1_part2
-> 正确构建 CLion。
-> 没有错误
set_env_var_for_3
include_part3
-> 正确构建 CLion。
set_env_var_for_3
set_env_var_for_part1_part2
include_part3
-> 正确构建 CLion。
set_env_var_for_part1_part2
set_env_var_for_3
include_part3
-> 正确构建 CLion。
-> 没有错误
set_env_var_for_3
include_part3
set_env_var_for_part1_part2
include_part1_part2
-> 在 part1_part2.
上基于 CLion 构建时出错
set_env_var_for_part1_part2
include_part1_part2
set_env_var_for_3
include_part3
-> 第 3 部分基于 CLion 构建时出错。
...无论做什么都是错误
来自错误。把我的话当成理所当然,那是因为他们分别没有找到他们需要构建的一些包,这是因为他们使用了错误版本的python。第 1 部分和第 2 部分需要 Python3,第 3 部分需要 Python2.
CLion 中没有设置环境变量IDE
结论,设置环境变量似乎没有太大变化。所以我进入 CMakeCache.txt 并发现 PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python 这可以解释因为它设置在这里并且已经找到一次它可能不需要再次更新。清理缓存,删除 cmake-build-debug 也没有任何改变。
我卡住了。我需要一种方法来使用不同版本的 python.
构建所有这些程序
嗯,所以,确实 CMakeCache.txt 迫使 python 的路径成为第一个使用的路径。我试图更改环境变量,但我想在看到一个环境变量后,它会进入 CMakeCache.txt 并被使用,而不是实际获取环境变量。
所以不要像我那样更改 Python:set( ENV{PYTHON_EXECUTABLE} /usr/bin/python3)
最好的方法是直接更改 CMake 中的变量:
set( PYTHON_EXECUTABLE /usr/bin/python3 )
上下文:
我正在构建一个 CMake 项目。此 CMake 项目 运行 位于 docker 容器内,使用 CLion 远程开发以便直接在 docker 中开发我的代码。因此所有 headers 和 lib 都在 docker.
中现在,因为我的项目分为几个部分,所以我有一个 "main" CMakelists.txt 调用下面的部分,如下所示:
--- CMakelists.txt
-------- Project_part1 --------------CMakelists.txt
-------- Project_part2 --------------CMakelists.txt
-------- Project_part3 --------------CMakelists.txt
注意:单独构建它们中的每一个都可以正常工作。
事实是,Project_part3 需要 Python2 作为解释器。但是上面那个(part1,part2)需要Python3.
仅包含 Project_part1 和 Project_part2 时,它通常在 CLion 上构建。 当仅包含 Project_part3 时,它通常在 CLion 上构建。
要定义在构建过程中将使用哪个 Python 版本,使用并设置一些环境:
ROS_PYTHON_VERSION
PYTHON_EXECUTABLE
Part_1 和 Part_2 需要 ROS_PYTHON_VERSION = 3 和 PYTHON_EXECUTABLE = /usr/bin/python3 Part_2 需要 ROS_PYTHON_VERSION = 2 和 PYTHON_EXECUTABLE = /usr/bin/python2
但是发生的事情是第一个得到 include/build 似乎 强制 之后的那个使用它使用的 Python 版本。
我尝试的是(伪cmake代码):
set_env_var_for_part1_part2
include_part1_part2 -> 正确构建 CLion。
set_env_var_for_3
set_env_var_for_part1_part2
include_part1_part2 -> 正确构建 CLion。
set_env_var_for_part1_part2
set_env_var_for_3
include_part1_part2 -> 正确构建 CLion。
-> 没有错误
set_env_var_for_3
include_part3 -> 正确构建 CLion。
set_env_var_for_3
set_env_var_for_part1_part2
include_part3 -> 正确构建 CLion。
set_env_var_for_part1_part2
set_env_var_for_3
include_part3 -> 正确构建 CLion。
-> 没有错误
set_env_var_for_3
include_part3
set_env_var_for_part1_part2
include_part1_part2 -> 在 part1_part2.
上基于 CLion 构建时出错set_env_var_for_part1_part2
include_part1_part2
set_env_var_for_3
include_part3 -> 第 3 部分基于 CLion 构建时出错。
...无论做什么都是错误
来自错误。把我的话当成理所当然,那是因为他们分别没有找到他们需要构建的一些包,这是因为他们使用了错误版本的python。第 1 部分和第 2 部分需要 Python3,第 3 部分需要 Python2.
CLion 中没有设置环境变量IDE
结论,设置环境变量似乎没有太大变化。所以我进入 CMakeCache.txt 并发现 PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python 这可以解释因为它设置在这里并且已经找到一次它可能不需要再次更新。清理缓存,删除 cmake-build-debug 也没有任何改变。
我卡住了。我需要一种方法来使用不同版本的 python.
构建所有这些程序嗯,所以,确实 CMakeCache.txt 迫使 python 的路径成为第一个使用的路径。我试图更改环境变量,但我想在看到一个环境变量后,它会进入 CMakeCache.txt 并被使用,而不是实际获取环境变量。
所以不要像我那样更改 Python:set( ENV{PYTHON_EXECUTABLE} /usr/bin/python3)
最好的方法是直接更改 CMake 中的变量:
set( PYTHON_EXECUTABLE /usr/bin/python3 )