Ubuntu18.04-Ros-Melodic 版本Python从别的包引入功能模块报No module named XXX的解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Ubuntu18.04-Ros-Melodic 版本Python从别的包引入功能模块报No module named XXX的解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2613字,纯文字阅读大概需要4分钟。
内容图文
简介
我们知道在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
最后
文中没有根据自己的实际包进行阐述,沿用的官方案例进行,不过我亲自使用上述方法,没有任何问题,欢迎大家留言交流。
内容总结
以上是互联网集市为您收集整理的Ubuntu18.04-Ros-Melodic 版本Python从别的包引入功能模块报No module named XXX的解决方案全部内容,希望文章能够帮你解决Ubuntu18.04-Ros-Melodic 版本Python从别的包引入功能模块报No module named XXX的解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。