Ubuntu18.04-Ros-Melodic 版本Python从别的包引入功能模块报No module named XXX的解决方案

简介

我们知道在Python中若想从其他文件夹导入模块,我们需要在该文件夹加入内容为空的__init__.py作为导入的引子,但是当你沿用这个思路放到ROS上后,你会发现还会继续报错,本文就以解决该问题为主要主题进行分析,希望对大家所有帮助。

问题描述

1, 创建新包如下,并创建多个文件夹,同时在需要被被人导入模块的文件加入__init__.py,过程如下:

$ cd ~/catkin_ws/src/my_pkg    # new catkin package, in the workspace
$ mkdir bin
$ mkdir src
$ mkdir src/tutorial_package
$ touch src/tutorial_package/__init__.py

2,在tutorial_package目录下再创建一个测试文件src/tutorial_package/hello.py

def say(name):
    print('Hello ' + name)

3,在另外一个文件夹bin下创建一个新文件hello

   #! /usr/bin/env python
  
   import tutorial_package.hello 
   if __name__ == '__main__':
   			tutorial_package.hello.say('my friend!')

4,该问题出现步骤

注意:我们在ROS下别忘记添加可执行权限

$ bin/hello 
Traceback (most recent call last):
  File "bin/hello", line 3, in <module>
    import tutorial_package.hello
ImportError: No module named tutorial_package.hell

5,当前目录结构如下

├── bin
│   └── hello
├── CMakeLists.txt
├── include
│   └── ny_pkg
├── package.xml
└── src
    └── tutorial_package
        ├── hello.py
        └── __init__.py

6,问题解决

这里由于python解释器去找寻这个模块找不到因此报错,非ROS我们只需要加入__init__.py即可,但ROS下需要进行如下特殊配置,ROS给我们设置好了专门的宏定义设置方式如下

Step1: 在该pkg根目录新建steup.py文件并添加如下内容

from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

# fetch values from package.xml
setup_args = generate_distutils_setup(
    packages=['tutorial_package'],#这里你要引用的pkg目录
    package_dir={'': 'src'},#包含这个文件夹的目录比如这里我是放到src目录下
)
setup(**setup_args)

Step2:新的目录结构如下:
├── bin
│   └── hello
├── CMakeLists.txt
├── include
│   └── ny_pkg
├── package.xml
├── setup.py
└── src
    └── tutorial_package
        ├── hello.py
        └── __init__.py
Step3:在根目录CmakeLists.txt下把下面这行注释关闭
## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
catkin_python_setup()
Step4:Catkin_make 即可,注意官网这里说若需要安装还需要添加如下语句
catkin_install_python(PROGRAMS bin/hello
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

[1]http://docs.ros.org/jade/api/catkin/html/user_guide/setup_dot_py.html
[2]http://wiki.ros.org/rospy_tutorials/Tutorials/Makefile#Installing_scripts_and_exporting_modules

最后

文中没有根据自己的实际包进行阐述,沿用的官方案例进行,不过我亲自使用上述方法,没有任何问题,欢迎大家留言交流。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值