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的解释器
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
-
源码目录结构
-
编译配置过程
①配置
②编译与安装
[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
②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为安装位置
-
不按照以上配置可能出现的问题:
-
configure: error: set ac_cv_file__dev_ptmx to yes/no in your CONFIG_SITE file when cross compiling
-
编译
注意:虽然交叉编译成功,但很多模块未编译的成功,这需要下载与配置三方库,在此先不研究此问题,遇到问题再解决(因为这些模块不是必须的)
下面是缺少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
-
安装
-
验证
[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
4.后记
① 在开发板执行python文件时可能会出现找不到python3执行文件,此时需要建立软链接到/usr/bin/python3
②最开始时准备移植python2.7,但是出现下面问题后,需要排查问题太多,故改为移植python3.7.3
-
参考