debian 9 安装 python 库记录

一.背景

嵌入式开发最后需要给开发板配置python 及其各种库,且开发板里有系统自带的 python 2.7 版本,而开发手册建议 python 版本 3.5+,为了避免后续屁事不断的麻烦,决定采用虚拟环境。此博客后续会更新。

二.安装过程

(1) numpy 库

1.过程

1.1 安装 虚拟环境 及 python 3+,命令如下:

sudo apt install virtualenv
sudo apt-get install libpython3.5-dev
sudo apt install python3-tk
virtualenv -p /usr/bin/python3 venv

1.2 安装 python3-dev(因为开发板里有两个版本,所以要指明是 python 3 这个版本。) 依赖库,后面用得上,先装好。

sudo apt install python3-dev

安装下面库之前,先进入虚拟环境:

source venv/bin/activate

你们的路径并不是一定和我一样,到时注意一下。进入虚拟环境后,下面就是在该环境下安装各种库。

1.3 安装 numpy 库。一开始安装出错,想了一会,直觉告诉我应该是相关编译器(gcc,make)没装导致出错,本来想一个个下,发现有个软件包将它们全包含了,参考博客 https://blog.csdn.net/yzpbright/article/details/81515459 。于是,有:

sudo apt-get install build-essential

然后再试一下,pip 一律不要加 sudo ,否则库会安装在 python 2 的版本下,切记!

pip install numpy

1.4 因故第二次安装时,没这么顺利,磕磕碰碰的。当时按我上次经验装好各种库,安装后报错:

Consider using the --user option or check the permissions

上网查解决方法,全部喊我这样写:

pip install --usr numpy

大概上天考验我,还是不行,查了一遍也没什么法子,只能自己瞎搞了。先下好它的安装包,解压到 site-packages 目录下,然后找到 numpy 的 setup.py 文件,运行它

python setup.py install

还是不行,草,后来想他一直在报权限方面的错误,就干脆把 site-packages 目录下的所有文件(包括其自身)的权限都设为 777 ,然后再运行 setup.py 脚本,就开始编译安装,中间过程没看,后来在最后一行发现:

error : Pemission denied : /venv/bin/f2py3.5  # 不知道什么鬼错误

还以为又安装失败,不死心的进入 python 然后 import numpy 一下,竟然没报错,然后又输入几行代码,正常运行!
好吧,有时候瞎搞也是一种宝贵的冒险精神,希望下次运气也这么好吧。
更新:关于这种权限问题,经过多次碰壁后,摸索出解决方案。在装 numpy 之前,把 /venv 目录下四个子目录的权限全设为777,如下:

sudo chmod 777 bin include lib share   # 我是在 /venv 目录里操作的,所以是相对路径

1.5 第三次安装 numpy 时,是的我又来了,也遇见了第二次相同问题,权限错误。后来就

sudo pip3.5 install numpy # 还是虚拟环境下,加上 3.5 让系统明白你要装在哪个 python 版本上

这样操作,错倒是没报,只是安装结束后,进 python2.7 、python3.5中 import numpy 都报错没有此模块。想了一下没有头绪时,只有重新安装,因为我是 python3.5 的虚拟环境下,所以可以直接用 pip ,这点注意。

pip install numpy
##然后报错
error : Pemission denied : /venv/bin/f2py3.5 

看了一会,试着进入 python3.5 ,然后 import numpy ,发现成功了。

好了,下一个库。

(2) scipy 库

2.1 scipy 库的安装花费时间蛮长的,网上资料太多,光是选择就花了蛮久时间,看完很多经验,采用以下做法。主要参考这位前辈的博客 https://blog.csdn.net/yishengguoke/article/details/79435436 。
注:要安装numpy和scipy,就需要ATLAS —> 要安装ATLAS,就需要安装BLAS和LAPACK 。

# 安装gfortran,后面编译过程中会用到
sudo apt-get install gfortran
# 安装blas,Ubuntu下对应的是libopenblas,其它操作系统可能需要安装其它版本的blas——这是个OS相关的。
sudo apt-get install libopenblas-dev
# 安装lapack,Ubuntu下对应的是liblapack-dev,和OS相关。
sudo apt-get install liblapack-dev
# 安装atlas,Ubuntu下对应的是libatlas-base-dev,和OS相关。
sudo apt-get install libatlas-base-dev

然后,输入命令:

pip install scipy

“building wheel for scipy” 这挣扎了好久,还是成功安装,心累。

说句题外话,一开始参考网上的这个方法:

sudo apt install python3-scipy 

虽然成功安装,但进入 python 3 ,在交互模式下输入 import scipy ,发现报错:没有该模块。所以后来又卸载了它。

sudo apt remove python3-scipy 

所以,这个方法你们看着用。

(3) Pillow 库

1.过程

不出意外,安装 Piilow 库时也报错,基本都是依赖库的原因,万恶的依赖库。上网查资料,这位仁兄的很靠谱 https://blog.csdn.net/sinat_21302587/article/details/54631597 ,操作如下:

sudo apt-get build-dep python-imaging   # 注意不是 sudo apt-get install build-dep python-imaging

一开始以为作者少了个 install ,自作主张给它加上去了,结果打脸了,所以同志们要相信别人啊。200多M下完执行:

pip install Pillow  # 和上面一样,虚拟环境下下载,不要加 sudo 

成功安装,这个折腾少点,希望接下来能够顺一点。

(4)h5py 库

1.过程

参考博客:https://blog.csdn.net/lingyun_csdn/article/details/79921750 。
我的输入如下:

pip install cython   #  再次提醒,注意是虚拟环境,不要加 sudo 。
sudo apt-get install libhdf5-dev   #  PyPI里没有它,用 apt 下载 。
pip install h5py

发现好几个库安装时都会在 " building wheel for xxxx" 卡一会。不过还是成功了,下一个坑,继续 。

(5) onnx 库

1.过程

这个库是搞得最久的一个库了,可能它比较新,网上的经验也不多,不过找了几天还是找到一篇,我大体是参考他的
https://www.cnblogs.com/jourluohua/p/10235317.html 。个人操作如下:
一开始安装 protobuf 库,这个它在 PyPI 上很多衍生版本,一开始下的时候也挑花眼,最后看资料才明白,单纯下 protobuf 就好:

pip install protobuf

毫无疑问,肯定安装失败,又找了会资料,下了这个库:

pip install pytest 
pip install pybind11  # 此外,numpy 与 scipy 也是需要提前下好。.

下了后,还是不行,一直报错与 protobuf 有关,找了会资料,下了它们:

sudo apt-get install  libprotobuf-dev protobuf-compiler

最后,试了下

pip install onnx 

好了,成功安装,该死的依赖库。

(6)opencv-python 库

① 体会
opencv 库是我花了最久的一个库了,不知道是不是系统原因,直接 pip install opencv-python 会显示找不到该库。上 pypi 下载 whl 包安装,调用时会报错 ‘ No modul name cv2.cv2’ 。关于这个 BUG 找遍网络也没有解决办法,为了它我重装4次,换了3种系统,卡了我10天时间。终于,在快要急秃头的时候,受大神启发,官网下载编译。左右无路,只能编译,还好成功了,特意记录心得如下。参考前辈经验:
https://blog.csdn.net/qq_37910312/article/details/72866242
https://blog.csdn.net/layallan/article/details/78328943
https://blog.csdn.net/qq_40548832/article/details/85115227
https://blog.csdn.net/qq_25005909/article/details/78554469
我主要参考第一个,它比较简单明了。其次,第三个也对我启发很大。
环境: debian9 aarch64 + python3.5
② 过程
首先,上官网下载源码 https://docs.opencv.org/3.4.6/d2/de6/tutorial_py_setup_in_ubuntu.html ,建议使用谷歌浏览器,因为它可以帮你翻译英文。。。。

进官网看一下文档,虽然比较老了,个别地方可能有出入,也看一下。如上图,选择自己需要版本,记得刷新一下,不然网络差的话,换版本也白换。
debian 9 安装 python 库记录_第1张图片
用 git 命令下载源码,我下的时候超时了,没成功,后来直接进网页下的,这个随你们,看具体情况。下载完成后,压缩包是在

/home/linaro/Download  # 即 家目录的 Download 目录

# 然后解压缩,文件是个 zip 格式
unzip opencv-master.zip  # 解压缩

# 解压缩后得到一个目录,叫 opencv-master
cd opencv-master

sudo mkdir build 

cd build  # 老套路

然后到这先停下,要配置一堆依赖库,关于依赖库很想吐槽,又多又杂,有些还搜不到。而且我的是 debian9 系统,官网中是 ubuntu 系统,可能个别安装包名字有出入,所以建议不要照着官网下,因为大都搜不到。
关于这个鄙人发现一个小 trick,就是你先

# 记得先更新 apt
sudo apt update

sudo apt upgrade

sudo apt-get install build-essential -y

sudo apt install python3-pip 

sudo apt install python-opencv  # 这个是安装在 python 2.7 下,而我需要是 python 3.5,所以不能用这招。
# 然后
sudo apt remove python-opencv  # 它版本也太低,2.4+ 的版本,不能满足需要。

解释一下,因为 apt 安装 opencv 时,系统会连依赖库一起下好,而你卸载的时候,依赖库不会被卸载。所以用这招,下依赖库会快很多。不过保险一点还是选篇情况与你最相近的博客,借鉴一下。不要东抄西抄,这样效率低不说,还有可能出问题。

pip3 install setuptools

pip3 install wheel

pip install numpy

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y # 还是借鉴了第一篇博客

如果 libswscale-dev 下不成功,建议这样。此外好像没什么库下不成功,如果有其他的报错,上 https://packages.ubuntu.com/ 去搜名字版本是否有变化,及时更改。

sudo apt install libavutil-dev libswscale4
# 之后再试一下
sudo apt install libswscale-dev

之后就是编译了,先进上文创建的 build 目录,然后执行 cmake ,如果你要安装在 python 2 环境下,就直接 sudo cmake ,我是因为要安装在 python 3 上面才输一堆参数。

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local  # opencv 安装路径

PYTHON3_EXECUTABLE=/usr/bin/python3 # 因为我要装在 python3.5 上,所以提供 python3 的 bin 命令

PYTHON_INCLUDE_DIR=/usr/include/python3.4 # 我的是 /usr/include/python3.5

# 特意把 我的路径 和 博客的路径 都贴给你们看,区别是不是不大,所以很好找,不要慌。
PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.4m.so  # 我的是 /usr/lib/aarch64-linux-gnu/libpython3.5m.so

# 我的是 /usr/local/lib/python3.5/dist-packages/numpy/core/include .. 。
PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.4/dist-packages/numpy/core/include .. # 最后的两点不要丢掉!!!

千万注意,以上路径要按着你真实路径来,不要瞎抄。基本和我这个差不多,即使名字会部分有区别,还是可以找到的。耐心点,不要急。cmake 之后,再

sudo make 

会出来一大片绿色的字体。
debian 9 安装 python 库记录_第2张图片
debian 9 安装 python 库记录_第3张图片
开始编译的样子, 一片绿对了,要想生活过得去,头上就得是吧,如果中途报错的话要重新 cmake 。首先make clean 清空之前 make 的文件。
debian 9 安装 python 库记录_第4张图片debian 9 安装 python 库记录_第5张图片
这我自己拍的,什么显示 python2 python3 ,说明两个版本都会装上 opencv 。上图是 make 完毕时的样子。可能是我以前波折太多,后来编译时很顺利。最后

sudo make install

安装很快的,安装好以后,进 python2 python3 ,import cv2 都没报错,说明 opencv 我终于搞定了。真不容易,在它手里吃的 BUG 比其他加起来还多。
③ 建立软链接
顺便说一句,opencv 默认是安装在 /usr/local/lib/python3.5 下的,如果你为 python3.5 创建了虚拟环境,还要建立个软连接。具体如下,现在 /usr/local 下找到 opencv 执行文件。

 # .so 后缀就是 cv2 的执行文件
 /usr/local/lib/python3.5/dist-packeages/cv2/python3.5/cv2.cpython-35m-aarch64-linux-gnu.so

然后进入虚拟环境

source venv/lib/activate
python
import sys
print(sys.path)

之后会打印出来 python 的调用库路径,选择一个,最好和其他的库放在一起,便于管理。我的是

/venv/lib/python3.5/site-packgaes

然后,建立软连接

sudo ln -s /usr/local/lib/python3.5/dist-packeages/cv2/python3.5/cv2.cpython-35m-aarch64-linux-gnu.so /venv/lib/python3.5/site-packgaes/cv2.so

在这之前,要保证你虚拟环境下的 python 3.5 安装了 numpy ,不然会报错。之后就是验证了,这个我讲了很多了,不写了。

(7)tensorflow 库

一开始也装过 tensorflow ,也没报错,opencv 装好就这样了,不知道它们两个是不是犯冲。找了一下原因没头绪,报的错别人没经历过,自己瞎想。基于opencv 的经验,我觉得很有可能是版本原因,我是 debian9 aarch64 结构,而一般版本全是 x86_64 之类的,安装包也以他们居多。
上网找了下 tensorflow aarch64 版本的,还好有人替我编译好了。给出网址
https://github.com/lhelontra/tensorflow-on-arm/releases 。注意自己 pip 支持的版本,如果问我怎么看,如下:

python  # 进入 python

 # 以下是 python 交互模式
import pip._internal 

print(pip._internal.pep425tags.get_supported())

如果支持,那就少了麻烦,否则只有更改安装包的名字了。然后就是 pip 安装,记得 cd 到安装包所在的目录 或者 输入绝对路径,我是在安装包目录中执行的。

# 不知道为什么,1.14.1 下不成功,可能是我网络原因,不过 1.13.1 能下
pip install tensorflow-1.13.1-cp35-none-linux_aarch64.whl

安装完毕后,老套路,确定是否成功。刚刚又安装了一次 tensorflow ,1.14.1各种安装慢、装不上,装1.13.1明显快很多。

python
import tensorflow as tf
tf.__version__  # '1.13.1'
len(dir(tf))  # 620

一开始出来一大串英文,如下:
debian 9 安装 python 库记录_第6张图片
好像是版本原因,不过不影响使用。

你可能感兴趣的:(经验记录)