树莓派配置 python 环境
经过一整天的折腾,从 py3.6 到 py2.7 到 py3.5 又到 py3.6 最后到 py3.5,总结了主要过程与心得
以下配置的环境:
- os: Raspbian Debian 9.8 (stretch)
- Kernel: armv7l Linux
树莓派有桌面版镜像中以附带了 python2.7 与 python3.5.4,但是现在很多库都不支持 py2.7 ,所以推荐使用 3.5 以上的版本。但是由于不用处理器不同py版本之间的py库的 whl安装文件不同,树莓派官方仅提供了大多数 py35 的编译好的库文件,所以推荐使用 py3.5。如果真的需要装 3.6以上版本见 github:raspbian-python3.6.rst
关于 python 库 whl文件的编译:Python中
pip
可以直接安装的文件是 whl文件,而python 的包源文件是 zip 压缩文件,包含了 py 文件和 c 文件,其需要编译后生成 whl 文件,编译是个很漫长而且会出各种麻烦错误的过程。有的库没有系统或者 cpu 架构的限制,如pyparsing
,它发布的 whl文件后缀就是none-any.whl
。有的库(我测试下来好像大多都是有大量计算的库) 需要使用当前用户的处理器来生成对应的 whl文件,python官方是给出了常见配置编译好的 whl文件,比如 windows 64位处理器那其专用的 whl文件后缀就应该是win_amd64.whl
(amd64 指的是 amd64 架构的处理器)。对于树莓派 3b+,那其对应的可直接安装的 whl文件的后缀就是linux_armv7l.whl
,树莓派 py3.5 提供了很多针对此架构的 whl文件,但是 py3.6 只有非常少一部分有编译好的。
linux 下安装 python 的包的途径有两种方式,一种是 linux 系统的 apt install python(3)-xxx
,这种方式安装的是对应 linux 发行商把稳定的 python 包发布到了自己的 Package Archives,另一种是 python 的包管理器 pip install xxx
。
1. 更换默认 python
注意:不是特别需求或者不喜欢折腾的不要更换默认 python。如果更换了默认的python,那以后就没办法再使用 apt install python-xxx
给 python2 安装包了,使用 apt isntall python3-xxx
安装 python3 的包的话需要按下面的错误总结解决两个 python 2与3 语法差异带来的错误。
sudo mv /usr/bin/python /usr/bin/python2
# 上面命令,若python2已存在则删除/usr/bin/python
sudo ln -s /usr/bin/python3.5 /usr/bin/python
sudo mv /usr/bin/pip /usr/bin/pip2
# 上面命令,若不存在pip忽略即可,若已存在pip2,则删除/usr/bin/pip
sudo ln -s /usr/bin/pip3.5 /usr/bin/pip
python -V # 检查默认python版本
pip -V # 检查默认pip版本,如果pip版本与上面的python版本不符,使用下面更新pip可自动解决
2. 更新 pip
# 推荐下面方法
wget -c https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
3. 安装库
更换源见:python更换源及安装库 安装库:
推荐先去 www.piwheels.org/simple ,这里可以下载到比较新版的,手动下载 whl文件,再安装 (推荐使用 sudo 安装,因为有的库会有附带文件需要添加到 path,如 numpy 附带的 f2py)。下面以 opencv 为例:
# piwheels 下载 wget -c https://www.piwheels.org/simple/opencv-python/opencv_python-3.4.4.19-cp35-cp35m-linux_armv7l.whl sudo pip install ./opencv-python/opencv_python-3.4.4.19-cp35-cp35m-linux_armv7l.whl
如果此网址中没有,那再考虑使用
sudo apt install python3-***
错误总结:
1. 自己编译 whl
如果需要自己编译 whl 来安装,事先需要安装好 Python3.h
(py2对应的是Python.h)
和 freetype
、png
:
sudo apt install Python3.h
sudo apt install libfreetype6-dev # 包含freetype、png
2. sudo apt install python-***
错误
sudo apt install python-xxx
是给 python2 安装包,替换默认 python 后 python2 安装包会有很多错误,没有很好的解决办法。
sudo apt install python3-xxx
给 python3 安装包会有下面的错误,部分原因是因为 python2 与 python3 之间差异导致的,修改成 python3 语法即可解决。
from ConfigParser import SafeConfigParser ImportError: No module named 'ConfigParser'
,将ConfigParser
修改为configparser
参考链接: stackoverflow: importerror-no-module-named-configparser
sudo vim /usr/share/python/debpython/version.py
# 将 ConfigParser 修改为 configparser
"except (IOError, OSError), e: SyntaxError: invalid syntax" when configuring python-lockfile
,将except (IOError, OSError), e
修改为except (IOError, OSError) as e
sudo vim /usr/share/python/debpython/namespace.py
# 将 `except (IOError, OSError), e` 修改为 `except (IOError, OSError) as e`
ModuleNotFoundError: No module named 'apt_pkg'
这个错误没有找到解决方案,不过我发现它并不影响安装结果和使用E: Sub-process /usr/bin/dpkg returned an error code
,解决方案( 参考自 百度经验 如何解决dpkg: error processing install-info ):sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/ sudo mkdir /var/lib/dpkg/info/ sudo apt-get update sudo apt-get -f install sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/ sudo rm -rf /var/lib/dpkg/info sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
3. import numpy
错误
import numpy
错误: Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory,解决方案(参考自github issue):
sudo apt install libatlas-base-dev
4. import cv2
错误
import cv2
错误: ImportError: libjasper.so.1: cannot open shared object file: No such file or directory,解决方案(参考自github issue):
sudo apt-get install libjasper-dev libqtgui4 python3-pyqt5 libqt4-test