0 前言
近期尝试在ubuntu16.04上使用yolov5,整个过程中出现了特别多的问题,特此记录下来,仅供以后自己和各位难友们参考。
yolov5安装环境依赖于python3.6及以上,而ubuntu16自带python2.7以及python3.5,因此首先需要对python3进行升级。
1 python3.5升级为python3.8
1.1 添加 deadsnakes PPA 源
sudo add-apt-repository ppa:deadsnakes/ppa
1.2 更新源
sudo apt-get update
1.3 安装python3.8
sudo apt-get install python3.8
1.4 测试是否安装成功
python3.8 -V
1.5 配置python3.8为默认python3
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2
sudo update-alternatives --config python3
随后输入python3.8所在一行数字,回车
1.6 测试是否配置成功
python3
若配置成功,会显示python3版本为python3.8
至此,pythoh3.8的安装以及完成,但设置python3.8为默认python3后,系统终端将无法利用快捷键和图标打开,只能鼠标右键打开,需解决终端无法打开的问题。
2 解决python3升级后终端无法打开的问题
2.1 寻找gnome-terminal所在位置
which gnome-terminal
显示 /usr/bin/gnome-terminal
2.2 编辑gnome-terminal文件
sudo gedit /usr/bin/gnome-terminal
修改第一行#!/usr/bin/python3为#!/usr/bin/python3.5
此时再按快捷键,终端即可打开。
随后,还需要为python3配置相对应的pip3库,这里我尝试了两种方法。
3 pip3安装
3.1 尝试第一种方法
sudo apt-get install python3-pip
3.2 失败后采用第二种方法
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
我安装时此处报错,随后:
sudo apt-get install python3.8-distutils
再尝试:
sudo python3 get-pip.py
测试是否安装成功:
pip3 -V
4 安装yolov5
4.1 下载
git clone https://github.com/ultralytics/yolov5.git
4.2 安装依赖
cd ~/yolov5
pip3 install -U -r requirements.txt
4.3 测试功能
python3 detect.py
此时会报错:
Traceback (most recent call last):
File "detect.py", line 12, in
import cv2
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
是因为yolov5基于python3,此时需要python3调用cv2.so文件,而python3此时找不到cv2.so,因为此时cv2.so文件指向了python2.7。
解决方法一:
sudo gedit ~/.bashrc
在末尾添加:
export PYTHONPATH="/home/lww/.local/lib/python3.8/site-packages":$PYTHONPATH
随后:
source ~/.bashrc
python3 detect.py
成功
(若采用这种方法,会出现ros无法启动的问题,因为source /opt/ros/kinetic/setup.bash默认指向了python2.7,ros依赖于python2.7,我们需要使用ros的时候必须将export PYTHONPATH="/home/lww/.local/lib/python3.8/site-packages":$PYTHONPATH注释掉)
解决方法二:
编辑detect.py文件,在import cv2前写上:
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
python3 detect.py
成功
附:如何改变pip指向
安装python3对应的pip3之后,发现输入pip -V,也是对应的python3的pip库,此时我需要pip指向python2,pip3指向python3。
首先,找到pip位置
which pip
修改第一行代码#!/usr/bin/python3,改为:
#!/usr/bin/python2