本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
ROS系统将python包编译为可执行文件的简单步骤
chenguangming9 · 254浏览 · 发布于2021-07-23 +关注

 

本文章讲述ROS系统下如何将python编译为可以执行文件,步骤比较简单,感兴趣的朋友跟随小编一起看看吧

python install模式开发规则

本文章讲述ROS系统下如何将python编译为可以执行文件,步骤比较简单,请严格执行避免疏漏

1.下载必须文件

1

2

3

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,并做下列修改(若如需用到动态参数,则以下请忽略)

1

2

3

4

5

6

7

8

9

10

11

12

13

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.改造目录结构

1

2

##原结构,.py文件应放在scripts文件夹下

ls

在这里插入图片描述

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

在这里插入图片描述

3.创建CMakelist规则(有引用关系)

1) 修改当前包下的CMakelist
增加如下内容,其中add_subdirectory根据自己python文件存放的目录调整

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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
每一个被引用的文件都要写进去,注意结尾要写主函数的文件名

1

2

3

4

5

6

##添加子目录

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
所有被引用的文件都需要添加规则


1

2

3

4

5

6

7

8

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.非引用关系(单文件)

写两次

1

2

3

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. 如何引用包

改规则后需要加上子目录前缀

1

2

3

4

from mypackage import 2

改后

from mypackage.2 import function

6.cfg动态调参

前面说了子目录要与本节点同名,因为编译后并不会以子目录的名称命名,而是以节点名命名,编译生成的可执行文件会放到devel或install的lib/python2.7/dist-packages下,而以源码模式运行则会读取子目录下的cfg文件

如car_mqtt_api编译后动态调参的可执行程序放到如下目录

1

devel/lib/python2.7/dist-packages/mypackage/cfg

此时需要将该目录下的文件copy到子目录

1

2

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文件


相关推荐

PHP实现部分字符隐藏

沙雕mars · 1312浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 896浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 957浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 953浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1077浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页