背景:

  人生苦短,我用Python。

说明:

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

  Python   : Python 3.7.6

编译:

##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/ # File Name: make.sh
# Created : Tue 24 Dec 2019 04:20:51 PM CST ##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=arm-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 bulid-${BUILD_HOST} -p
cd bulid-${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目录放到目标板中,添加以下环境变量:

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

export PATH=$PATH:/mnt/nfs/python/bin   # 用于执行python,填写 Python目录中的Bin目录即可export PYTHONPATH=               # 这一行是为了额外的模块的搜索,根据实际模块的使用情况进行填写,可留空,可参考附录进行填写
export PYTHONHOME=/mnt/nfs/python      # 最终的安装路径,必须填写

(如果不添加,会导致;关于这里可以参考:根据:https://askubuntu.com/questions/905372/could-not-find-platform-independent-libraries-prefix)

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 PYTHONPATH='/path/to/pythondir:/path/to/pythondir/lib-dynload:/path/to/pythondir/site-packages'
export PYTHONHOME=/path/to/pythondir

最终结果:

附录:有关错误信息以及处理办法

$PYTHONPATH路径问题

错误信息:

ImportError: No module named site

解决:

a.查找site相关路径

find / -name site.py*
/usr/lib64/python2.7/site.pyc
/usr/lib64/python2.7/site.py
/usr/lib64/python2.7/site.pyo

b.将路径添加到$PYTHONPATH中

export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7

arm linux 移植 python3.6的更多相关文章

  1. arm linux 移植 x265

    背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...

  2. Linux 安装 go 以及 arm linux 移植 go

    背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...

  3. arm linux 移植 MQTT (paho、mosquitto)

    前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...

  4. arm linux 移植 ffmpeg 库 + x264

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

  5. arm linux 移植 PHP

    背景: PHP 是世界上最好的语言. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 php :7.1.30 zlib :1.2.11 libxml ...

  6. arm linux 移植支持 HP打印机

    背景 由于业务需要,需要hi3531d主板上加入对于HP打印机的支持. 通过与产品经理,技术主管的沟通:通用支持是不现实的,只要求彩色打印,先不考虑打印机的价格,只要支持一款打印机即可. 注意: Li ...

  7. arm linux 移植 gdb/gdbserver

    背景 调试工具gdb的使用对于嵌入式Linux开发人员来说是一项不可少的技能. 目前,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机 ...

  8. arm linux 移植 udhcp 与 使用

    背景 在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址. udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDH ...

  9. arm linux 移植 rsync

    背景: 在产品开发中可以使用rsync进行大文件的拷贝,断点续传. host平台 :Ubuntu 16.04 arm平台 : 3531d   rsync   :3.1.3 arm-gcc :4.9.4 ...

随机推荐

  1. 【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)

    题意: 输入一个正整数N(<=1000),接下来输入N个点的序号.如果刚才输入的序列是一颗二叉搜索树或它的镜像(中心翻转180°)的先序遍历,那么输出YES并输出它的后序遍历,否则输出NO. t ...

  2. stm32CubeMx lwip + freeRTOS

    MCU: STM32F429IGT6 工具:STM32CubeMx  版本号 5.0.0 Keil uVersion5 目的:使用LWIP 实现简单的网络连通 一  简介 LWIP(Light Wei ...

  3. 3000 - No Mycat Database selected

    今天在linux上搭建好mycat后,用Navicat连接出现如下错误 尝试很多方式发现并没有什么用,后面改用SQLyog连接就可以正常使用了!!!

  4. org.springframework.web.multipart.MultipartException: The current request is not a multipart request

    今天做图片上传的碰到这个问题,查找原因是html请求的方式问题.from中涉及到图片上传的就要用post提交方式.否则就会报这个错误.如果已经是post的提交方式了还有这个错...还有两种解决方法. ...

  5. C — 小知识

    老是记错int与void*之间的转换,所以记录一个,顺便用一下一些宏.预处理... int与void*的转换.打印变量名: #include <stdio.h> // 打印变量名 #def ...

  6. [Unity] Shader Graph Error 当前渲染管道与此主节点不兼容(The current render pipeline is not compatible with this master node)

    Shader Graph Error  : The current render pipeline is not compatible with this master node 问题产生环境: Un ...

  7. Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别

    1.Period final修饰,线程安全,ISO-8601日历系统中基于日期的时间量,例如2年3个月4天. 主要属性:年数,月数,天数. /** * The number of years. */ ...

  8. 如何查看NXP产品的供货计划?

    大的半导体厂商一般会提供每个产品的生命周期计划,NXP的工业级IC一般供货10年,汽车级是15年,具体的时间可以在官网查询得到. 首先,打开NXP官网链接 产品长期供货计划,可以看到以下页面 接着,筛 ...

  9. 20 个新的且值得关注的 Vue 开源项目

    译者:前端小智作者:Nastassia Ovchinnikova来源:flatlogic.com 个人专栏 ES6 深入浅出已上线,深入ES6 ,通过案例学习掌握 ES6 中新特性一些使用技巧及原理, ...

  10. 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课

    你要永远记住,实事求是. 我好像没能力给大家分享什么.分享点我的专业知识吧.我是做推荐+增长的,在一家D轮 DAU快千万的创业公司做增长优化负责人.一路优化,我把人均时长提高了30多分钟(现在人均时长 ...