ROS系统将python包编译为可执行文件的方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了ROS系统将python包编译为可执行文件的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ROS系统将python包编译为可执行文件的方法文章都会有
千家信息网最后更新 2026年11月02日ROS系统将python包编译为可执行文件的方法
这篇文章主要介绍了ROS系统将python包编译为可执行文件的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ROS系统将python包编译为可执行文件的方法文章都会有所收获,下面我们一起来看看吧。
1.下载必须文件
git clone https://gitee.com/alen2020/ros_python_install_mode_files##取该目录下的cmake目录和setup.py,install.sh到自己节点的目录cp -r cmake setup.py car_mqtt_api/
如果用到动态参数,还需要拷贝install.sh,并做下列修改(若如需用到动态参数,则以下请忽略)
cp install.sh car_mqtt_api/##需要修改install.sh下的package_name,修改为当前包名package_name=package_path=`rospack find ${package_name}`if [ $# -eq 1 ]; then package_path=$1fi#注意默认认为.py文件放到src目录下,如果放到scripts下,需要改为scripts #我默认ROS工作空间的前缀目录为/root/ROS/catkin_ws/ ,如不是则请修改mkdir $package_path/src/$package_name/cfgcp /root/ROS/catkin_ws/devel/lib/python2.7/dist-packages/$package_name/cfg/* $package_path/src/$package_name/cfg2.改造目录结构
##原结构,.py文件应放在scripts文件夹下ls

主函数留在当前目录,被调用文件放到子目录,子目录同本包名

3.创建CMakelist规则(有引用关系)
1) 修改当前包下的CMakelist
增加如下内容,其中add_subdirectory根据自己python文件存放的目录调整
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)# include CMake module for Cythoninclude(UseCython)add_custom_target(ReplicatePythonSourceTree ALL ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ReplicatePythonSourceTree.cmake ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})add_subdirectory(src)##如果用到动态调参,需要另加上下面语句add_custom_target(install.sh ALL)add_custom_command(TARGET install.shPOST_BUILDCOMMAND /bin/sh ${PROJECT_SOURCE_DIR}/install.sh ${PROJECT_SOURCE_DIR}))2) 在scripts目录下添加CMakeLists.txt
每一个被引用的文件都要写进去,注意结尾要写主函数的文件名
##添加子目录add_subdirectory(mypackage)cython_add_standalone_executable(1 MAIN_MODULE 1.py mypackage/2.py 1.py)install(TARGETS 1 RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})3) 在scripts目录的子目录下添加CMakeLists.txt
所有被引用的文件都需要添加规则
cython_add_module(2 2.py)set_target_properties(2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION})install(TARGETS 2 LIBRARY DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION})省略以下。。。4.非引用关系(单文件)
写两次
cython_add_standalone_executable(car_mqtt_api_main MAIN_MODULE car_mqtt_api_main.py car_mqtt_api_main.py)install(TARGETS car_mqtt_api_main RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})5. 如何引用包
改规则后需要加上子目录前缀
原from mypackage import 2改后from mypackage.2 import function
6.cfg动态调参
前面说了子目录要与本节点同名,因为编译后并不会以子目录的名称命名,而是以节点名命名,编译生成的可执行文件会放到devel或install的lib/python2.7/dist-packages下,而以源码模式运行则会读取子目录下的cfg文件
如car_mqtt_api编译后动态调参的可执行程序放到如下目录
devel/lib/python2.7/dist-packages/mypackage/cfg
此时需要将该目录下的文件copy到子目录
mkdir -p mypackage/scritps/cfgcp */devel/lib/python2.7/dist-packages/mypackage/cfg scripts/mypackage/cfg
7.常见bug
找不到模块:在install/lib/python2.7/dist-packages/car_control目录下放置__init__.py文件
关于"ROS系统将python包编译为可执行文件的方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"ROS系统将python包编译为可执行文件的方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
文件
目录
子目
子目录
动态
方法
系统
译为
内容
知识
规则
编译
函数
前缀
参数
篇文章
结构
节点
价值
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司排名
重生之互联网科技帝国
深圳恒合互联网络科技有限公司
互联网科技的发展
狮子座互联网科技有限公司
唐信互联网科技 大连
苏州大垚互联网科技
互联网 新科技
左右互联网络科技
互联网科技股午盘股票涨跌
青海省互联网新科技
北京大学互联网科技怎么样
互联网科技实习生岗位职责
消费医药和互联网科技
群盈汇互联网科技有限公司
广州富喜互联网络科技
中天科技中国工业互联网
广州燕处互联网科技有限公司
互联网时代科技型公司的机会
宁波允成互联网科技有限公司
互联网和科技创新
合肥互联网科技公司
科技类的互联网平台
成都玖崟互联网科技有限公司乐商圈怎么样
常德市电业局互联网科技部
互联网科技大奖都有哪些公司
米聚互联网科技南京有限公司排面
济南有互联网科技公司吗
九思连强互联网电子科技有限公司
亚光科技低轨卫星互联网