Pydrake对Python3.9/3.10的支持问题及构建配置咨询
如何让Pydrake支持Python3.10(Ubuntu 18环境)
前置准备
- 补全Python3.10的系统依赖:
sudo apt install python3.10-dev python3.10-distutils - 给Python3.10装pip:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3.10 - 安装Drake构建基础工具:
sudo apt install build-essential cmake ninja-build git libssl-dev libboost-all-dev
构建时强制指定Python3.10
Drake的CMake构建系统会自动选默认Python,但多版本环境下必须手动指定目标版本:
- 克隆Drake源码(已克隆可跳过):
git clone https://github.com/RobotLocomotion/drake.git && cd drake - 创建构建目录:
mkdir build && cd build - 用CMake绑定Python3.10:
cmake .. \ -DPython_EXECUTABLE=/usr/bin/python3.10 \ -DPython_INCLUDE_DIR=$(python3.10 -c "import sysconfig; print(sysconfig.get_path('include'))") \ -DPython_LIBRARY=$(python3.10 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/libpython3.10.so')") \ -DCMAKE_BUILD_TYPE=Release
- 开始构建:
ninja - 完成后验证:启动Python3.10,输入
import pydrake; print(pydrake.__version__),无报错即为成功
Drake配置Pydrake的核心机制
1. CMake的Python版本检测
Drake用CMake的FindPython.cmake模块在构建前做版本检测:
- 检测到的Python版本会决定Pydrake绑定文件的存放路径(比如
install/lib/python3.10/site-packages) - 不手动指定的话,CMake会优先选系统默认Python,这就是之前Pydrake只在3.8可用的原因
2. PyBind11生成Python绑定
Pydrake的Python接口完全靠PyBind11实现:
- Drake的C代码里嵌入了PyBind11的绑定逻辑,定义C类/函数如何映射为Python对象
- 构建时CMake会把这些绑定代码编译成
.so动态库,放到对应Python版本的site-packages目录下
3. 路径与环境变量关联
- Pydrake默认安装到
build/install目录,其中lib/pythonX.Y/site-packages是绑定文件的存放地 - 某个Python版本要能调用Pydrake,必须让它的
sys.path包含这个目录;如果构建时指定系统级Python路径(不推荐),会直接把绑定文件装到系统Python的site-packages里
4. 版本兼容性约束
- Drake master分支对Python版本的支持随迭代更新,Ubuntu18默认Python版本偏老,手动装的3.10必须确保依赖(比如PyBind11)能适配,这也是要装
python3.10-dev的原因
内容的提问来源于stack exchange,提问作者HoliInn
相关产品推荐
相关产品推荐

