Ale*_*lex 32 opencv python-3.x ros
我首先使用此脚本从源代码安装openCV .当我测试它运行良好.
安装ROS动能后,打开python3并运行import cv2,出现以下错误:
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
Run Code Online (Sandbox Code Playgroud)
Pau*_*aul 23
看起来这个问题是由ROS添加/opt/ros/kinetic/lib/python2.7/dist-packages到python路径引起的.当您使用命令激活ROS时,实际上会发生这种情况source /opt/ros/kinetic/setup.bash.这行通常会添加到bashrc文件的末尾/home/username/.bashrc.
解决方法是从bashrc文件中删除此行.这样就可以正确使用python3 opencv包,你仍然可以运行source /opt/ros/kinetic/setup.bash使用ROS.但是,这确实意味着您无法在同一环境中使用ROS和python3.
希望有人可以提出更好的答案,但这应该适用于此.
cal*_*rus 15
如果您正在使用anaconda,请激活您想要使用的环境,并从中删除罪魁祸首sys.path.
为此,打开一个python3控制台,从中控制:
>>> import sys
>>> print(sys.path)
Run Code Online (Sandbox Code Playgroud)
您将看到几条路径,其中您应该注意到:
'/opt/ros/kinetic/lib/python2.7/dist-packages'
Run Code Online (Sandbox Code Playgroud)
然后删除它:
>>> sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
Run Code Online (Sandbox Code Playgroud)
使用本地编译的opencv在anaconda3上使用python3.5进行测试.这也可能适用virtualenvs.
要获得永久性解决方案,请'/opt/ros/kinetic/lib/python2.7/dist-packages'从~/.bashrc@Paul的答案中删除路径.
zky*_*ony 13
正如所指出的,source /opt/ros/kinetic/setup.bash您中的命令将.bashrc修改PYTHONPATH为:
> echo $PYTHONPATH
/opt/ros/kinetic/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)
就我而言,由于我在 Python 3 项目中使用了 virtualenv,因此我只运行以下命令来清除PYTHONPATH变量,同时激活 virtualenv。
unset PYTHONPATH
Run Code Online (Sandbox Code Playgroud)
现在,cv2在 Python 3 virtualenv 中导入可以正常工作。我验证了以下路径cv2:
unset PYTHONPATH
Run Code Online (Sandbox Code Playgroud)
为避免每次激活该 virtualenv 时都必须运行此命令,我将其添加到/bin/activatevirtualenv 目录中的文件中,如下所示:
In [1]: import cv2
In [2]: cv2.__file__
Out[2]: '<path_to_virtualenv>/lib/python3.5/site-packages/cv2/cv2.cpython-35m-x86_64-linux-gnu.so'
Run Code Online (Sandbox Code Playgroud)
小智 7
有完全相同的问题.问题是ROS为python 2创建了自己的cv2.so文件,然后将每个导入请求路由到该文件.这是一个非常简单的修复:
转到您的site-packages文件夹
cd /usr/local/lib/python3.5/site-packages/
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用的是虚拟环境,则必须使用虚拟环境,而应该执行以下操作:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
Run Code Online (Sandbox Code Playgroud)
然后,使用-f标志强制新的sym-link
ln -sf /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Run Code Online (Sandbox Code Playgroud)
这应该解决问题!
如果这些解决方案都不适合您(如我的情况),您仍然可以尝试欺骗您的系统导入正确的 opencv
ros_path = '/opt/ros/kinetic/lib/python2.7/dist-packages'
if ros_path in sys.path:
sys.path.remove()
import cv2
sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')
Run Code Online (Sandbox Code Playgroud)
也许你可以考虑在导入 cv2 后在正确的位置替换 ros python 路径。
即使路径设置正确,我的python似乎在导入正确的cv2时遇到问题,可能是因为与cv2相比python3 cv2库(cv2.cpython-35m-x86_64-linux-gnu.so)的奇怪命名。所以我在 /opt/ros/kinetic/lib/python2.7/dist-packages
小智 5
步骤1:找到您的cv2.so的安装路径(如果您使用python-cv wheel安装opencv)
步骤2:将路径导出到.bashrc或.zshrc文件,如下所示:
export PYTHONPATH="/home/userx/anaconda3/lib/python3.5/site-package??s:$PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42831 次 |
| 最近记录: |