背景:

人生苦短,我用Python。arm板上可以跑python的话,我们就能轻松愉快的做很多事了。

说明:

编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出host的解释器。(有点像Go语言)

编译:

home下新建一个目录python3.7,在python3.7下新建make.sh脚本。

cd ~

mkdir python3.7

cd python3.7

nano make.sh

编译的话用这个一键编译脚本就可以了,复制以下内容到make.sh,BUILD_HOST需要改成自己的交叉编译器:

#!/bin/sh

BASE=`pwd`

BUILD_HOST=arm-himix200-linux

OUTPUT=${BASE}/install/

make_dirs() {

cd ${BASE}

mkdir compressed install source -p

sudo ls

}

tget () { #try wget

filename=`basename $1`

echo "Downloading [${filename}]..."

if [ ! -f ${filename} ];then

wget $1

fi

echo "[OK] Downloaded [${filename}] "

}

download_package () {

cd ${BASE}/compressed

#下载包

tget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz

}

tar_package () {

cd ${BASE}/compressed

ls * > /tmp/list.txt

for TAR in `cat /tmp/list.txt`

do

tar -xf $TAR -C ../source

done

rm -rf /tmp/list.txt

}

make_host () {

cd ${BASE}/source/Python*

./configure

make && sudo make install

sudo rm /usr/bin/python

sudo ln -s /usr/local/bin/python3 /usr/bin/python

}

make_target () {

cd ${BASE}/source/Python*

echo `pwd`

sudo make clean

mkdir build-${BUILD_HOST} -p

cd build-${BUILD_HOST}

mkdir ${BASE}/install/python -p

../configure CC=${BUILD_HOST}-gcc \

CXX=${BUILD_HOST}-g++ \

--host=${BUILD_HOST} \

--build=x86_64-linux-gnu \

--target=${BUILD_HOST} --disable-ipv6 \

--prefix=${BASE}/install/python \

--enable-optimizations \

ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes

make && make install

}

make_dirs

download_package

tar_package

#make_host #如果没有的话,需要安装

make_target

查看下本机python是否为python3.7,如果不是需要去掉make_host注释,编译python3.7,保存退出,执行make.sh。

./make.sh

注意:脚本里有些命令需要sudo权限,执行过程需要输入密码,但不可以为了省事sudo ./make.sh,否则会导致文件权限问题使得交叉编译器无法执行。

部署:

将编译生成的python目录放到目标板中,添加以下环境变量:

(假设 python 目录放在 /mnt/nfs/python)

export PATH=$PATH:/mnt/nfs/python/bin   # 用于执行python,填写 Python目录中的Bin目录即可

export PYTHONPATH=              # 这一行是为了额外的模块的搜索,根据实际模块的使用情况进行填写,可留空,可参考附录进行填写

export PYTHONHOME=/mnt/nfs/python      # 最终的安装路径,必须填写

环境变量可以写入/etc/profile文件末尾,执行source /etc/profile以启用。

Fatal Python error: initfsencoding: unable to load the file system codecModuleNotFoundError: No module named 'encodings'Current thread 0xb6f28000 (most recent call first):Aborted有关的解释是这样的:

必须设置2个环境变量 PYTHONPATH 与 PYTHONHOME.因为python3解释器搜索有关库时依赖这2个变量:

PYTHONPATH 作为 模块 的默认搜索路径 (The PYTHONPATH variable augments the default search path for module files.)

PYTHONHOME 用于 python标准库(PYTHONHOME is used for standard python libraries. ),

设置变量的格式以shell格式即可,例如我设置的环境变量如下:

export PATH=$PATH:/mnt/python/python3.7/bin

export PYTHONPATH='/mnt/python/python3.7:/mnt/python/python3.7/lib:/mnt/python/python3.7/lib/python3.7/site-packages'

export PYTHONHOME=/mnt/python/python3.7

现在可以在板子终端里敲入python按tab可以自动补全为python3的话,说明环境变量设置成功,执行python3进入repl,如下图已经可以正常运行python了。

但是还有些基础module没有移植进来,后面的话很多module都会依赖到,可以在repl中输入help('modules')查看目前已有的modules,目前缺少zlib,_ctypes,_ssl等模组,这些都是后面实现pip所必须的。其中_ctypes为setuptools依赖模组,有了setuptools我们也可以在板子上下载第三方模组手动安装,在python3.7之前的版本_ctypes是可以随着编译python一起编好的,不需要额外移植。

后面的文章将继续讲如何移植这些必要模组

arm怎么运行python_给arm板编译移植python(一)相关推荐

  1. atom编译运行python_在atom中编译python

    我使用atom编译python代码.我想测试一下我的IDE.但是我面对这个问题.这个错误是:Uncaught TypeError: Bad argument internal/child_proces ...

  2. ARM开发板系统移植-----kernel的编译

    前面一篇文章http://www.cnblogs.com/linzizhang/p/4817336.html介绍了开发板上系统软件的第一部分--bootloader的编译方法. 背景:把bootloa ...

  3. arm qt mysql插件_编译ARM平台的QtEmbedded的MySQL插件和移植MySQL

    编译ARM平台的QtEmbedded 的MySQL插件和移植MySQL 到ARM开发板 经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了m ...

  4. 天嵌TQ2440 ARM开发板Uboot移植

    TQ2440 ARM开发板Uboot移植 移植环境 主    机:VMWare--Fedora 10 Kernel:2.6.34  开发板:TQ2440--256MB Nand 编译器:arm-lin ...

  5. 建立arm linux运行环境,构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)

    一 前言 本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. ...

  6. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  7. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的"linux-2.6.30.4_20100531.tar.bz2"源码包. 解压(天嵌默 ...

  8. ARM处理器运行模式

    ARM处理器运行模式 1.ARM处理器有7种运行模式: 1)用户模式 2)特权模式 3)中断模式 4)快速中断模式 5)终止模式 6)未定义指令模式 7)系统模式 其中,除用户模式外,其他6种模式称为 ...

  9. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  10. zybo上运行linux,Zybo开发板linux作业系统移植

    文章主要介紹zybo board上linux作业系统移植过程.分别介绍了开发环境搭建.U-boot编译.linux内核编译.busybox制作等流程及注意事项.文章使用的开发板是zynq 7000系列 ...

最新文章

  1. 恕我直言,微服务挺好,但不适合你
  2. 人人可用的在线抠图,还是AI自动化的那种!北大校友的算法被玩出新高度
  3. ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类
  4. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  5. C#StreamWriter的操作解析
  6. hdu 1116 欧拉路
  7. A20 网卡驱动分析
  8. json中怎么去掉[]外的引号_如何正确检查发动机中的机油量?从机油尺处向外窜气是怎么回事?...
  9. Mac下使用macdeployqt打包qt程序:
  10. 数列分块入门 4(LibreOj-6280)
  11. vim默认设置的配置
  12. 适合做短视频电商的人群分类
  13. struts2之日期类型转换
  14. 修复iPhonex不出声的左扬声器
  15. oracle ash dump 导出,Oracle 导出 ASH的dump信息
  16. iec611313标准下载_IEC 61730-1-2016
  17. 阿里云盘 手动获取token教程
  18. POJ3658Matrix( 双重二分+负数+死循环)
  19. springboot中使用thymeleaf片段引入出现500错误(易错)
  20. 什么是表示学习(representation learning)表征学习 表达学习

热门文章

  1. 在Visio中如何绘制直线
  2. C++案例——联系人管理系统
  3. 测试Python的poplib模块读取邮箱信息
  4. 如何评价柏拉图_哲学家如何看待死亡?|读柏拉图《斐多篇》(1)
  5. win2003服务器安全设置技术实例(一)
  6. 空间里相片批量导入u盘_怎样将U盘内相片弄到QQ空间的相册内
  7. Simscape Mutibody Modeling学习--碰撞接触与反应(1)
  8. 很强悍的在线科学计算器
  9. C语言中mac是什么意思,CMAC是什么意思
  10. 普加甘特图,项目管理解决方案。