armv7 32位树莓派4B+安装Tensorflow踩坑总结

文章目录

  • 背景
  • 失败方案
    • Docker(失败)
    • lhelontra/tensorflow-owen chu lain-arm(失败)
  • 最终方案
    • snowzach/tensorflow-multiarch
      • 遇到的问题
        • 包管理器里虽然有python3.8,但是没有python3.8-pip啊
        • 安装tensorflow
          • 第一次,少安装了python3.8-dev
          • 第二次,报错 AttributeError: install_layout
          • 第三次,报错 AttributeError: install_layout
          • 最后import tensorflow发现numpy没办法用

背景

  朋友说树莓派64位不识别总线摄像头,去github issue查看说是64位树莓派不支持,于是就换到了32位系统,32位系统已经被时代抛弃了,装个tensorflow都要经历九九八十一难。

失败方案

Docker(失败)

  Docker似乎只有amd64框架的

lhelontra/tensorflow-owen chu lain-arm(失败)

  这里有armv7的whl,但是要求python3.7,32位树莓派包管理器里面没有python3.7,装起来难得要死
  最开始尝试在包管理器里面寻找python3.7,没找到
  然后打算用archiconda来创建虚拟环境,但最后发现,archiconda只为Arm64提供支持,32位根本无法安装
  archiconda不行,miniconda也有arm版本的,于是去找了arm版本的miniconda,最终之找到了一个15年的版本,好像听知乎说也无法安装到python3.7的环境
  conda的路走不通,那能不能用其他虚拟环境,python有个虚拟环境管理工具virtualenv,但是conda之外的虚拟环境管理工具好像必须先安装了对应的python可执行文件才能创建,那完全就不符合我的需求了,我就是因为其他途径装不上才去找virtualenv的。失败

最终方案

snowzach/tensorflow-multiarch

  这个仓库里面有python3.8的whl包,而树莓派的包管理器里面正好就有python3.8,开始尝试!

遇到的问题

包管理器里虽然有python3.8,但是没有python3.8-pip啊

  没有pip怎么安装包呢,安装pip的几种方式
  我用这些方法好像都是却distutils.coredistutils.cmd之类的,按理来说这个应该安装了setuptools应该就可以了,但是可能和系统的python有冲突,装了setuptools还是不行。
  去github下载setuptools的源码进行安装使用sudo python3.8 setup.py install来安装。可是安装之后仍然没有用,缺distutils.core,但是我是已经安装了的。我查找了一下发现软件包的位置不太对
用locate查一下distutils/core.py的位置(下面的文本是用QQ传的,被QQ转成表情了,想不出来原本是什么了,就还原成这个样子吧)

pi@robotsystem:~ $ locate distutils/core
/usr/lib/pypy/lib-python/2.7/distutils/core.py
/usr/lib/python3/dist-packages/jedi/third_party[表情]peshed[表情]dlib/2and3/distutils/core.pyi
/usr/lib/python3/dist-packages/mypy[表情]peshed[表情]dlib/2/distutils/core.pyi
/usr/lib/python3/dist-packages/mypy[表情]peshed[表情]dlib/3/distutils/core.pyi
/usr/lib/python3/dist-packages/numpy/distutils/core.py
/usr/lib/python3/dist-packages/setuptools/_distutils/core.py
/usr/lib/python3.8/site-packages/setuptools-67.6.1-py3.8.egg/setuptools/_distutils/core.py
/usr/lib/python3.9/distutils/core.py
/usr/local/lib/python3.9/dist-packages/numpy/distutils/core.py

  可以看到有个/usr/lib/python3.8/site-packages/setuptools-67.6.1-py3.8.egg/setuptools/_distutils/core.py,而且我看着这个_distutils/core.py的内容和distutils/core.py是差不多的,所以我试图将/usr/lib/python3.8/site-packages/setuptools-67.6.1-py3.8.egg/setuptools/_distutils/软链接到/usr/lib/python3.8/site-packages/

# 备份原来的distutils或者把原来的distutils文件夹删掉
sudo mv /usr/lib/python3.8/site-packages/distutils
# 软链接过去
ln -s /usr/lib/python3.8/site-packages/setuptools-67.6.1-py3.8.egg/setuptools/_distutils/ /usr/lib/python3.8/site-packages/distutils

  解决。然后就可以通过脚本方式安装pip了,其实搞好setuptools的distutils基本上哪种方式都好安装了。

  通过脚本的方式可以保证都能够安装到最新版本的pip,同时操作简单。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
  我这样就安装成功pip3.8了。

安装tensorflow

  下载whl包,四个都要下载,先安装libclang,再tensorflow_io_gcs_filesystemtensorflow_io最后安装tensorflow
  安装tensorflow中途遇到一个pyh5的包安装失败了三次

第一次,少安装了python3.8-dev

  从报错提到python开发相关的包没有安装,需要安装python-dev或者python-devel,很庆幸,包管理器中有这个包

sudo apt install python3.8-dev

  重新安装tensorflow

第二次,报错 AttributeError: install_layout
 File "/usr[表情]b/python3.8/distutils/cmd.py", line 107, in __getattr__
                raise AttributeError(attr)
            AttributeError: install_layout
            [end of output]
      
        note: This error originates from a subprocess, and is likely not a problem with pip.
        ERROR: Failed building wheel for numpy
        Running setup.py clean for numpy
        error: subprocess-exited-with-error

  解决方法:更新setuptools,之前源码安装的setuptools好像并没有生效

pip3.8 install -U  setuptools
第三次,报错 AttributeError: install_layout
      running build_ext
      /tmp/pip-build-env-qlynfwsg/overlay[表情]b/python3.8/site-packages[表情]tuptools/config/pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.
        warnings.warn(msg, _BetaConfiguration)
      Loading library to get build settings and version: libhdf5.so
      error: Unable to load dependency HDF5, make sure HDF5 is installed properly
      error: libhdf5.so: cannot open shared object file: No such file or directory
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for h5py
Failed to build h5py
ERROR: Could not build wheels for h5py, which is required to install pyproject.toml-based projects

  缺少libhdf5.so链接库,可能是hdf5没有安装,安装libhdf5-dev包(还是hdf5-dev包不太记得了)

# 可以先apt search hdf5搜索一下
sudo apt install libhdf5-dev
最后import tensorflow发现numpy没办法用

  原因:python3.8似乎读到了python3.9的numpy,3.8重新单独安装一下即可

pip3.8 install --force-reinstall numpy

  至此tensorflow就安装好了,之后装scikit-learn还遇到好多坑,不过问chatgpt好像都能问出来。

你可能感兴趣的:(tensorflow,python,人工智能)