ROS系统将python包编译为可执行文件的方法
导读:本文共2295字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 1.下载必须文件gitclonehttps://gitee.com/alen2020/ros_python_install_mode_files##取该目录下的cmake目录和setup.py,install.sh到自己节点的目录cp-rcmakesetup.pycar_mqtt_api/如果用到动态参数,还需要拷贝install.sh,并做下列修改(若如需... ...
目录
(为您整理了一些要点),点击可以直达。1.下载必须文件
gitclonehttps://gitee.com/alen2020/ros_python_install_mode_files##取该目录下的cmake目录和setup.py,install.sh到自己节点的目录cp-rcmakesetup.pycar_mqtt_api/
如果用到动态参数,还需要拷贝install.sh,并做下列修改(若如需用到动态参数,则以下请忽略)
cpinstall.shcar_mqtt_api/##需要修改install.sh下的package_name,修改为当前包名package_name=package_path=`rospackfind${package_name}`if[$#-eq1];thenpackage_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/cfg
2.改造目录结构
##原结构,.py文件应放在scripts文件夹下ls
主函数留在当前目录,被调用文件放到子目录,子目录同本包名
3.创建CMakelist规则(有引用关系)
1) 修改当前包下的CMakelist
增加如下内容,其中add_subdirectory根据自己python文件存放的目录调整
set(CMAKE_MODULE_PATH${CMAKE_MODULE_PATH}${CMAKE_CURRENT_SOURCE_DIR}/cmake)#includeCMakemoduleforCythoninclude(UseCython)add_custom_target(ReplicatePythonSourceTreeALL${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.shALL)add_custom_command(TARGETinstall.shPOST_BUILDCOMMAND/bin/sh${PROJECT_SOURCE_DIR}/install.sh${PROJECT_SOURCE_DIR}))
2) 在scripts目录下添加CMakeLists.txt
每一个被引用的文件都要写进去,注意结尾要写主函数的文件名
##添加子目录add_subdirectory(mypackage)cython_add_standalone_executable(1MAIN_MODULE1.pymypackage/2.py1.py)install(TARGETS1RUNTIMEDESTINATION${CATKIN_PACKAGE_BIN_DESTINATION})
3) 在scripts目录的子目录下添加CMakeLists.txt
所有被引用的文件都需要添加规则
cython_add_module(22.py)set_target_properties(2PROPERTIESLIBRARY_OUTPUT_DIRECTORY${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION})install(TARGETS2LIBRARYDESTINATION${CATKIN_PACKAGE_PYTHON_DESTINATION})省略以下。。。
4.非引用关系(单文件)
写两次
cython_add_standalone_executable(car_mqtt_api_mainMAIN_MODULEcar_mqtt_api_main.pycar_mqtt_api_main.py)install(TARGETScar_mqtt_api_mainRUNTIMEDESTINATION${CATKIN_PACKAGE_BIN_DESTINATION})
5. 如何引用包
改规则后需要加上子目录前缀
原frommypackageimport2改后frommypackage.2importfunction
6.cfg动态调参
前面说了子目录要与本节点同名,因为编译后并不会以子目录的名称命名,而是以节点名命名,编译生成的可执行文件会放到devel或install的lib/python2.7/dist-packages下,而以源码模式运行则会读取子目录下的cfg文件
如car_mqtt_api编译后动态调参的可执行程序放到如下目录
devel/lib/python2.7/dist-packages/mypackage/cfg
此时需要将该目录下的文件copy到子目录
mkdir-pmypackage/scritps/cfgcp*/devel/lib/python2.7/dist-packages/mypackage/cfgscripts/mypackage/cfg
7.常见bug
找不到模块:在install/lib/python2.7/dist-packages/car_control
目录下放置__init__.py
文件
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
ROS系统将python包编译为可执行文件的方法的详细内容,希望对您有所帮助,信息来源于网络。