ROS系统将python包编译为可执行文件的简单步骤

 更新时间:2021年7月23日 15:00  点击:2148

python install模式开发规则

本文章讲述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=$1
fi
#注意默认认为.py文件放到src目录下,如果放到scripts下,需要改为scripts 
#我默认ROS工作空间的前缀目录为/root/ROS/catkin_ws/ ,如不是则请修改
mkdir $package_path/src/$package_name/cfg
cp  /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)
# include CMake module for Cython
include(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.sh
POST_BUILD
COMMAND /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/cfg
cp */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包编译为可执行文件的文章就介绍到这了,更多相关python包编译为可执行文件内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21