Python 从ROS包导入时发生ModuleNotFound错误

Python 从ROS包导入时发生ModuleNotFound错误,python,jupyter-notebook,virtualenv,ros,Python,Jupyter Notebook,Virtualenv,Ros,我使用了一个机器人模拟器,它只在RosIndigo上工作。我还必须使用Tensorflow和Jupyter笔记本,所以我用Python3.6创建了一个虚拟环境 我想从笔记本中的模拟器包导入一个文件。因此,在我为virtualenv获取bin/activate之后,我从我的catkin工作区获取devel/setup.bash。但即使这样做了,我还是会得到以下错误 ModuleNotFoundError Traceback (most recent ca

我使用了一个机器人模拟器,它只在RosIndigo上工作。我还必须使用Tensorflow和Jupyter笔记本,所以我用Python3.6创建了一个虚拟环境

我想从笔记本中的模拟器包导入一个文件。因此,在我为virtualenv获取bin/activate之后,我从我的catkin工作区获取devel/setup.bash。但即使这样做了,我还是会得到以下错误

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-8-8370e76446ee> in <module>
----> 1 import herbpy

~/my_workspace/devel/lib/python2.7/dist-packages/herbpy/__init__.py in <module>
     33 for __execfile in __execfiles:
     34     with open(__execfile, 'r') as __fh:
---> 35         exec(__fh.read())
     36     del __fh
     37     del __execfile

~/my_workspace/devel/lib/python2.7/dist-packages/herbpy/__init__.py in <module>

ModuleNotFoundError: No module named 'herb'
ModuleNotFoundError回溯(最近一次调用)
在里面
---->1进口赫比
在
33对于_execfile中的_execfile:
34打开(_execfile,'r')作为_fh:
--->35 exec(uu fh.read())
36德鲁福华酒店
37删除执行文件
在
ModuleNotFoundError:没有名为“herb”的模块
我尝试运行一个python文件来导入这个模块(在环境中)。它只运行python2。但是对于python2,我不能使用Tensorflow


如何将此文件导入笔记本?

有几件事。请记住,您可以通过以下命令指定要运行的python版本:

您可以通过以下方式从启动文件调用不同的python可执行文件:

<?xml version="1.0"?>
<launch>
  <!-- py3_ex.launch -->
    <node name="call_py3" pkg="my_new_pkg" type="call_py3.py" output="screen">
    </node>
</launch>
上面的脚本将运行python3代码,包括tensorflow。问题是,当它尝试在py3而不是py2上导入rospy时,它将找不到它的一些依赖项(例如rospkg),并给出一个致命错误

为了解决这个问题,(假设您没有切换到Ubuntu20+RosNoetic,使用本机py3支持,或者只使用py2),您可以从Py2Ros节点调用py3脚本,例如使用和管道。或者,最好通过localhost发送您的数据/图像/结果/输入,这可能是最简单的方法。要这样做,(它可以工作!)在两侧创建一个到本地主机(127.0.0.1)随机端口(ex5050)的
import socket
udp连接。启动两个脚本。py3脚本无法
导入rospy
,但它可以从sensor\u msgs.msg导入图像导入ros msgs:
。您可以找到一种方法(有多种方法可以将py对象转换为string并返回)


设置python3的一个更痛苦的方法(但之后应该更容易使用)是用python3替换python2包来使用ros。那里有很多指南,很多人都遇到过SO上发布的问题。

有几件事。请记住,您可以通过以下命令指定要运行的python版本:

您可以通过以下方式从启动文件调用不同的python可执行文件:

<?xml version="1.0"?>
<launch>
  <!-- py3_ex.launch -->
    <node name="call_py3" pkg="my_new_pkg" type="call_py3.py" output="screen">
    </node>
</launch>
上面的脚本将运行python3代码,包括tensorflow。问题是,当它尝试在py3而不是py2上导入rospy时,它将找不到它的一些依赖项(例如rospkg),并给出一个致命错误

为了解决这个问题,(假设您没有切换到Ubuntu20+RosNoetic,使用本机py3支持,或者只使用py2),您可以从Py2Ros节点调用py3脚本,例如使用和管道。或者,最好通过localhost发送您的数据/图像/结果/输入,这可能是最简单的方法。要这样做,(它可以工作!)在两侧创建一个到本地主机(127.0.0.1)随机端口(ex5050)的
import socket
udp连接。启动两个脚本。py3脚本无法
导入rospy
,但它可以从sensor\u msgs.msg导入图像导入ros msgs:
。您可以找到一种方法(有多种方法可以将py对象转换为string并返回)


设置python3的一个更痛苦的方法(但之后应该更容易使用)是用python3替换python2包来使用ros。那里有很多指南,很多人都遇到过发布在SO上的问题。

您可能需要明确地将模块添加到路径中
import sys
然后
sys.path.insert(0,“/path/to/your/package\u或\u module”)
@VarunNayak这样做会给其他模块带来相同的错误。在显式添加这些模块之后。它最终为我提供了/opt/ros/indigo/lib/python2.7/dist-packages中文件的语法。我不明白它怎么会在笔记本中出现语法错误,而在其他情况下它却可以正常工作。你必须使用python3吗?Ros indigo是在python2的基础上设计的。如果你想保证原生ros瞄准python3,如果你不必使用ubuntu 14,那么可以使用适用于ubuntu 20的ros noetic。你可能需要显式地将模块添加到你的路径中
import sys
然后
sys.path.insert(0,“/path/to/your/package\u或\u module”)
@VarunNayak这样做会给其他模块带来相同的错误。在显式添加这些模块之后。它最终为我提供了/opt/ros/indigo/lib/python2.7/dist-packages中文件的语法。我不明白它怎么会在笔记本中出现语法错误,而在其他情况下它却可以正常工作。你必须使用python3吗?Ros indigo是在python2的基础上设计的。如果你想保证原生ros瞄准python3,如果你不必使用Ubuntu14,那么可以使用适用于Ubuntu20的ros noetic。
#!/usr/bin/env python3
# call_py3.py
# Try to print out the python version
import sys
import platform
#import rospy

#rospy.init_node("call_py3");
print("\n\nPython Version:\n")
print(sys.version)
print(platform.python_version())
print("\n\n")
#rospy.spin()