python3.7移植到ARM开发板

本文详细介绍了在ZC706 ARMV7平台上从源码编译Python 3.7.3的过程,包括在Ubuntu 16.04 LTS上搭建编译环境、配置交叉编译工具链、编译host版和target版Python,以及在开发板上验证Python运行。解决了诸如模块缺失和依赖库问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  •   源码解压

root@mk# xz -d Python-3.7.3.tar.xz  /* 会解压为tar文件 */
root@mk# tar xvf Python-3.7.3.tar

  

  • 源码目录结构

  

  • 编译配置过程

①配置

②编译与安装

root@mk# make
root@mk# make install

//配置环境
root@mk# ln -s /usr/local/python/bin/python3 /usr/bin/python3
//若/usr/bin/python3存在,先rm /usr/bin/python3


验证
root@mk# 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编译的信息

root@mk-virtual-machine:/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
  • 交叉配置

    root@mk:/workspace/Python-3.7.3# mkdir build-zc706
    root@mk:/workspace/Python-3.7.3# cd build-zc706/
    //安装时所需的目录
    root@mk:/workspace/Python-3.7.3/build-zc706# mkdir /opt/python3.7 
    
    
    //配置
    root@mk:/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
  • 安装

   

   

  • 验证

root@mk-virtual-machine:/opt# tar cvf python3.7.tar pyton3.7/
root@mk-virtual-machine:/opt# cp python3.7.tar /tftpboot/

  target 下载与验证:

root@u1-sdr:/# tftp -g -r python3.7.tar 192.168.5.100
root@u1-sdr:/# tar xvf python3.7.tar -C /opt/
root@u1-sdr:/opt/pyton3.7# cd /opt/pyton3.7/bin/
root@u1-sdr:/opt/pyton3.7/bin# ./python3

  

4.后记

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

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

   

  • 参考

     https://blog.youkuaiyun.com/jzzy_hony/article/details/79745136

<think>我们正在讨论如何将PyQt5应用程序移植到全志V3S开发板上运行。全志V3S是一款嵌入式Linux开发板,资源有限,因此我们需要考虑如何在这种环境中运行PyQt5应用。 步骤: 1. 确保开发板上的Linux系统支持PyQt5运行环境。 2. 交叉编译PyQt5及其依赖(如Python、SIP、Qt5)以适用于ARM架构(因为全志V3S是ARM Cortex-A7)。 3. 将编译好的程序和依赖库部署到开发板上。 4. 测试运行。 由于开发板资源有限,我们可能需要精简Qt库,只包含应用程序所需的模块。 具体步骤: 1. **搭建交叉编译环境**: 我们需要为ARM架构交叉编译Python、SIP、PyQt5等。首先,配置交叉编译工具链(例如arm-linux-gnueabihf)。 2. **交叉编译Python**: 下载Python源代码,配置交叉编译选项,编译并安装到目标目录。 3. **交叉编译SIP**: SIP是PyQt5的依赖,需要先编译SIP。在配置时指定交叉编译工具链和Python安装路径。 4. **交叉编译Qt5**: 由于PyQt5依赖于Qt5,我们需要先交叉编译Qt5。注意,全志V3S开发板可能使用特定的图形后端(如framebuffer或Wayland),需要配置Qt5的编译选项以适应开发板。同时,为了节省空间,我们可以只编译必要的模块(如QtCore, QtGui, QtWidgets)。 5. **交叉编译PyQt5**: 配置PyQt5的交叉编译,指定Qt5和Python的路径,以及交叉编译工具链。 6. **部署到开发板**: 将交叉编译好的Python、SIP、Qt5和PyQt5库,以及应用程序代码和资源文件,复制到开发板的文件系统中。 7. **运行测试**: 在开发板上运行应用程序,注意设置环境变量(如PYTHONPATH, LD_LIBRARY_PATH, QT_QPA_PLATFORM等)。例如,如果开发板使用framebuffer,则设置QT_QPA_PLATFORM=linuxfb。 注意事项: - 全志V3S开发板可能内存和存储空间有限,因此需要精简库和应用程序。 - 可能需要调整Qt5的编译选项,去掉不必要的功能以减小体积。 - 如果开发板没有硬件加速,可能需要使用软件渲染,这可能会影响性能。 参考引用中提到了PyQt5的依赖问题(如SIP)和部署时可能遇到的动态库问题(如libGLESv2.dll),在Linux环境下,我们需要注意动态库的依赖关系,确保所有需要的库都被正确部署。 根据引用[3],在Windows下部署时可能需要复制libGLESv2.dll,但在Linux环境下,我们通常需要确保OpenGL ES的库(如libGLESv2.so)存在于开发板上。不过,全志V3S通常使用Mali400 GPU,因此应该已经提供了相应的驱动和库。 但是,由于嵌入式环境复杂,可能会遇到各种问题,需要具体调试。 下面是一个简化的步骤示例: **步骤1:设置交叉编译工具链** 从全志V3S的SDK中获取交叉编译工具链(例如arm-linux-gnueabihf),并设置环境变量。 **步骤2:交叉编译Python** ```bash ./configure --host=arm-linux-gnueabihf --prefix=/path/to/target/python_build --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no make make install ``` **步骤3:交叉编译SIP** ```bash python configure.py --platform linux-arm-gnueabihf-g++ make make install ``` **步骤4:交叉编译Qt5** 在配置Qt5时,需要指定交叉编译工具链,并选择必要的模块。例如: ```bash ./configure -prefix /path/to/qt5-build -xplatform linux-arm-gnueabihf-g++ -no-opengl -no-sse2 -no-xcb -no-cups -no-dbus -no-iconv -nomake examples -nomake tests -opensource -confirm-license -qt-libjpeg -qt-libpng -qt-zlib -skip qtx11extras -skip qt3d -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtpurchasing -skip qtscript -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtsvg -skip qttools -skip qttranslations -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtxmlpatterns ``` 然后编译并安装。 **步骤5:交叉编译PyQt5** 进入PyQt5源码目录,使用以下命令: ```bash python configure.py --confirm-license --verbose --qmake /path/to/qt5-build/bin/qmake --sip /path/to/sip/sip-bin --disable QtBluetooth QtNfc QtPositioning QtQuick QtQuickWidgets QtQml QtWebSockets QtXmlPatterns make make install ``` **步骤6:部署** 将编译好的Python、Qt5、PyQt5以及应用程序复制到开发板,并设置环境变量(在开发板的~/.bashrc或启动脚本中): ```bash export PYTHONPATH=/path/to/python/site-packages export LD_LIBRARY_PATH=/path/to/qt5/lib:/path/to/python/lib:$LD_LIBRARY_PATH export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 # 根据实际显示设备调整 ``` **步骤7:运行** 在开发板上运行Python应用程序: ```bash python your_app.py ``` 注意:以上步骤是简化的,实际过程中可能会遇到各种问题,需要根据具体情况进行调整。 另外,也可以考虑使用Buildroot或Yocto来构建整个文件系统,这样可以将PyQt5集成到根文件系统中。 由于全志V3S的资源限制,建议使用轻量级窗口管理器(如Xfbdev)或者直接使用Qt的linuxfb插件(无窗口管理器,直接输出到framebuffer)。 相关问题: 1. 如何为全志V3S开发板构建Linux文件系统? 2. 在嵌入式设备上运行PyQt5应用有哪些性能优化方法? 3. 如何调试PyQt5在嵌入式设备上的运行问题?</think>### 将PyQt5应用移植到全志V3S开发板的步骤指南 #### 1. **环境准备** - **交叉编译工具链** 获取全志V3S的ARM交叉编译工具链(如`arm-linux-gnueabihf-gcc`),用于编译Python和PyQt5依赖库。 - **文件系统支持** 确保开发板Linux系统包含必要的图形库(如Framebuffer驱动)和依赖: ```bash # 开发板最小依赖 sudo apt-get install libxcb1 libxrender1 libgl1-mesa-dev ``` #### 2. **交叉编译Python** - 下载Python源码(推荐3.7+),配置交叉编译: ```bash ./configure --host=arm-linux-gnueabihf --build=x86_64-linux-gnu \ --enable-shared --prefix=/opt/python-arm make && make install ``` - 将编译后的Python目录(`/opt/python-arm`)复制到开发板的`/usr/local`目录。 #### 3. **交叉编译PyQt5** - **编译SIP** PyQt5依赖SIP,需先交叉编译: ```bash python configure.py --platform linux-arm-gnueabihf-g++ make && make install ``` - **编译PyQt5** 使用Qt5的交叉编译版本(需提前编译Qt5基础库): ```bash python configure.py --confirm-license --verbose \ --qmake /path/to/qt5-arm/bin/qmake \ --disable QtBluetooth QtNfc make && make install ``` - **精简库文件**:移除开发板不需要的模块(如QtWebEngine)以节省空间。 #### 4. **部署到开发板** - 将以下目录复制到开发板: - Python安装目录(`/usr/local/lib/pythonX.X`) - PyQt5库(`/usr/local/lib/pythonX.X/site-packages/PyQt5`) - Qt5库(`/opt/qt5-arm/lib`) - 设置环境变量(在开发板`/etc/profile`中添加): ```bash export PYTHONPATH=/usr/local/lib/python3.9/site-packages export LD_LIBRARY_PATH=/opt/qt5-arm/lib:$LD_LIBRARY_PATH export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 # 使用Framebuffer显示 ``` #### 5. **测试运行** - 编写测试脚本(如`test.py`): ```python import sys from PyQt5.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello V3S!") label.show() sys.exit(app.exec_()) ``` - 在开发板执行: ```bash python3 test.py ``` #### 6. **常见问题解决** - **缺少OpenGL库**: 复制`libGLESv2.so`到开发板(参考引用[3])。 - **显示异常**: 尝试调整环境变量: ```bash export QT_QPA_EGLFS_INTEGRATION=none # 禁用EGLFS export QT_DEBUG_PLUGINS=1 # 启用插件调试 ``` - **资源优化**: 使用`strip`命令裁剪库文件大小,或使用Buildroot构建精简文件系统。 --- ### 相关问题 1. 如何为全志V3S交叉编译Qt5基础库? 2. 在资源受限的嵌入式设备上运行PyQt5有哪些性能优化技巧? 3. 如何将PyQt5应用打包成嵌入式系统的启动自运行程序? 4. Framebuffer和Wayland两种显示方案在PyQt5移植中的区别?
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼看到猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值