python3.7移植到ARM开发板

时间:2024-03-20 08:55:01

1.前言

      由于本人不是学习python语言的,对python理解只是片面的! 故该文章只是借鉴许多文章整理而成,取其精华,去其糟粕,总结出适合自己的方法!PS:移植pyhon到开发板的目的是为了使用psutil,一款跨平台可以获取系统信息的python三方库。

2.平台环境

  • host:Ubuntu 16.04 LTS(x64)
  • target: ZC706(ARMV7)
  • 虚拟机:VMware® Workstation 14 Pro
  • python版本:3.7.3
  • 编译工具链:arm-xilinx-linux-gnueabi- (petalinux软件中的)

3.安装过程

     编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出host的解释器

    python3.7移植到ARM开发板

 3.1 编译安装host版Python

           本文采用源码安装,其它方法请自行google

  •   源码解压

[email protected]# xz -d Python-3.7.3.tar.xz  /* 会解压为tar文件 */
[email protected]# tar xvf Python-3.7.3.tar

  python3.7移植到ARM开发板

  • 源码目录结构

  python3.7移植到ARM开发板

  • 编译配置过程

①配置

python3.7移植到ARM开发板

python3.7移植到ARM开发板

②编译与安装

[email protected]# make
[email protected]# make install

//配置环境
[email protected]# ln -s /usr/local/python/bin/python3 /usr/bin/python3
//若/usr/bin/python3存在,先rm /usr/bin/python3


验证
[email protected]# python3 -V
Python 3.7.3

 

  • 遇到的问题

ModuleNotFoundError: No module named '_ctypes

python3.7移植到ARM开发板

subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1

   rm /usr/bin/lsb_release

3.3 编译安装target版Python

  • 先清除host编译的信息

[email protected]:/workspace/Python-3.7.3# make clean

 不清理会出现以下错误:

Error: The source directory (..) is not clean
Building Python out of the source tree (in /workspace/Python-3.7.3
/build-zc706) requires a clean source tree (/workspace/Python-3.7.3/build-zc706/..)
Try to run: make -C ".." clean
Makefile:479: recipe for target 'check-clean-src' failed
make: *** [check-clean-src] Error 1
  • 交叉配置

    [email protected]:/workspace/Python-3.7.3# mkdir build-zc706
    [email protected]:/workspace/Python-3.7.3# cd build-zc706/
    //安装时所需的目录
    [email protected]:/workspace/Python-3.7.3/build-zc706# mkdir /opt/python3.7 
    
    
    //配置
    [email protected]:/workspace/Python-3.7.3/build-zc706#
    ../configure CC=arm-xilinx-linux-gnueabi-gcc \
    CXX=CC=arm-xilinx-linux-gnueabi-g++ \
    --host=arm-xilinx-linux-gnueabi \
    --build=x86_64-linux-gnu \
    --target=arm-xilinx-linux-gnueabi --disable-ipv6 \
    --prefix=/opt/pyton3.7 \
    ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes \
    
    
    · CC为指定C交叉编译器
    · CXX为指定C++交叉编译器
    · AR为ar工具
    · RANLIB为ranlib工具
    · Host为目标主机
    · Build为编译环境主机
    · Prefix为安装位置
    

     python3.7移植到ARM开发板

  • 不按照以上配置可能出现的问题:

  • configure: error: set ac_cv_file__dev_ptmx to yes/no in your CONFIG_SITE file when cross compiling

  • python3.7移植到ARM开发板

  • python3.7移植到ARM开发板

  • 编译

python3.7移植到ARM开发板

注意:虽然交叉编译成功,但很多模块未编译的成功,这需要下载与配置三方库,在此先不研究此问题,遇到问题再解决(因为这些模块不是必须的)

python3.7移植到ARM开发板

下面是缺少zlib库的错误:我在移植三方库过程中遇到的问题,不过被我跳过去,直接在host机上unzip了,然后拷贝到目标机中

(注意在host是不能shell setuptools-41.0.0-py3.7.egg ,因为这个蛋是交叉编译出来的,host无法识别)

<n3.7/site-packages# sh setuptools-41.0.0-py3.7.egg     
Traceback (most recent call last):
  File "<string>", line 1, in <module>
zipimport.ZipImportError: can't decompress data; zlib not availabl
  • 安装

   python3.7移植到ARM开发板

   python3.7移植到ARM开发板

  • 验证

[email protected]:/opt# tar cvf python3.7.tar pyton3.7/
[email protected]:/opt# cp python3.7.tar /tftpboot/

  target 下载与验证:

[email protected]:/# tftp -g -r python3.7.tar 192.168.5.100
[email protected]:/# tar xvf python3.7.tar -C /opt/
[email protected]:/opt/pyton3.7# cd /opt/pyton3.7/bin/
[email protected]:/opt/pyton3.7/bin# ./python3

  python3.7移植到ARM开发板

4.后记

  ① 在开发板执行python文件时可能会出现找不到python3执行文件,此时需要建立软链接到/usr/bin/python3

   ②最开始时准备移植python2.7,但是出现下面问题后,需要排查问题太多,故改为移植python3.7.3

   python3.7移植到ARM开发板

  • 参考

     https://blog.csdn.net/jzzy_hony/article/details/79745136