本文目录一览:
- 1、如何交叉编译Python到ARM-Linux平台
- 2、什么单片机可以跑python
- 3、有哪位大神嵌入式ARM中移植python的库,求助啊
- 4、python 移植到 arm 需要什么条件
- 5、arm可以用python编程吗
- 6、python| 2021款 m1pro mbp python开发配置
如何交叉编译Python到ARM-Linux平台
编译sqlite
先去 下载最新的sqlite源代码,我这里用的是3.5.6版本的。
我推荐使用amalgamation版本的源代码,这个代码只有几个文件而已,编译起来方便,而且据说 编译器好的话,还可能编译出更高效的代码。 我下载的是
[plain]
view plaincopy
先运行以下几步:
[plain]
view plaincopy
tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions
以上是把sqlite解压缩,然后做一些配置,这里,我希望sqlite到时候安装到/usr/local/arm/3.3.2里,要生成动态链接库,不要readline,不要sqlite的动态扩展。
然后编辑Makefile,把CFLAG和CXXFLAG中的-g去掉,我们不用debug sqlite。
接下来就可以编译和安装sqlite了:
[plain]
view plaincopy
make
make install
这一步就完成了sqlite的编译和安装了。
编译python
先去下载最新版本的python源代码,我这里下载的是:
[plain]
view plaincopy
先把python解压缩:
[plain]
view plaincopy
tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1
编译pc版本的语法解析器
由于在编译python的时候,需要先编译一个叫pgen的程序出来,用于生成语法解析器,所以我们要先生成一个pc版本的pgen:
[plain]
view plaincopy
mkdir build.pc
cd build.pc
../configure
make Parser/pgen
然后ls Parser一下,应该就能看到有pgen了。
修改configure
configure在检测编译器的printf是否支持%zd的时候,如果发现是在cross compile,就直接不干活了。这还了得?
把这一部分的检测代码去掉。这段代码起始于
[plain]
view plaincopy
echo "$as_me:$LINENO: checking for %zd printf() format support" 5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" 6
if test "$cross_compiling" = yes; then
结束于
[plain]
view plaincopy
cat confdefs.h \_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF
else
echo "$as_me: program exited with status $ac_status" 5
echo "$as_me: failed program was:" 5
sed 's/^/| /' conftest.$ac_ext 5
( exit $ac_status )
echo "$as_me:$LINENO: result: no" 5
echo "${ECHO_T}no" 6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
把这两段以及中间的内容都删除掉就可以了。
编译arm版本的python
有了语法解析器,就可以开始编译arm版本的python了。
[plain]
view plaincopy
mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared
先创建一个用于编译的目录build.arm,再对python做一些配置,如安装目录,不要ipv6,使用arm-linux的编译器,生成动态链接库。
修改Makefile
之后就要对Makefile做一些修改,把
[plain]
view plaincopy
OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
一行中,去掉-g,我们不要debug python,-O3改为-O2,空间紧张O2就可以了。
在
[plain]
view plaincopy
PGEN= Parser/pgen$(EXE)
一行的下面加上
[plain]
view plaincopy
PGEN_HOST= ../build.pc/Parser/pgen$(EXE)
表明我们在HOST上运行的pgen
在要使用PGEN的地方改为PGEN_HOST:
[plain]
view plaincopy
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
改为:
[plain]
view plaincopy
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
修改所有使用新生成的python的地方。
所有如 ./$(BUILDPYTHON) 的地方,都改为python
如:
[plain]
view plaincopy
platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' platform
改为
[plain]
view plaincopy
platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' platform
这种地方比较多,大家小心修改。
修改setup.py
setup.py负责编译python的各个扩展模块。但是,由于python完全没有考虑cross compile,所以要做一些修改。
PyBuildExt类:
函数的前两行是把/usr/local加到搜索目录中,我们的cross compiler一般不会直接安装在 /usr/local里面的,所以这两行去掉:
[plain]
view plaincopy
lib_dirs, inc_dirs的设定中,把中括号里的那些都去掉。 以下所有模块都不要:
这个函数在编译了所有的extension后,会去load这些刚编译好的extension, 但我们在i686的电脑上显然不能load,所以要跳过这些操作。 在 build_ext.build_extension(self, ext)后面直接写一个return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函数:
detect_modules函数:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,
[plain]
view plaincopy
由于python本身的问题,现在ctypes还不能在除i386以外的机器上运行,所以ctypes也去掉 编译sqlite的地方:
[plain]
view plaincopy
改为:
[plain]
view plaincopy
因为我的sqlite3安装在这里,如果这里不改的话,setup.py会在我的电脑上找sqlite
main函数:
setup函数调用的时候,把要安装的scripts那一部分去掉
之后就可以make make install了。
附上我修改后的 Makefile 和 setup.py 供大家参考
裁减python
python完全安装后,实在是很大,所以,要把一些肯定用不上的库去掉。 所以,再附上我的裁减脚本 cleanpy.sh
注意,由于我的python程序都运行在python -OO的参数下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,这个脚本会把所有的.py和.pyc都删除掉。
大家可以根据自己的需要做调整。
什么单片机可以跑python
Micro python 目前已经支持ARM系列单片机。
MCS-51单片机的逻辑部件,包括一个8位CPU及片内振荡器、 80514B掩膜ROM、87514KBEPROM、8031无ROM。
特殊功能寄存 器SFR128BRAM、定时器/计数器T0及T1、并行I/O接口:P0、P1、P2、P3;串行接口:TXD、RXD;中断系统:INT0,INT1。
扩展资料:
单片机也被称为单片微控器,属于一种集成式电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
单片机凭借着强大的数据处理技术和计算功能可以在智能电子设备中充分应用。简单地说,单片机就是一块芯片,这块芯片组成了一个系统,通过集成电路技术的应用,将数据运算与处理能力集成到芯片中,实现对数据的高速化处理。
参考资料来源:百度百科-单片机
有哪位大神嵌入式ARM中移植python的库,求助啊
我没弄过ubuntu下的graphics.py。
但是弄过windows下的。
1. apt是用来安装Ubuntu系统的软件的。
2. Python是Ubuntu下面的一个软件。
3. 而graphics.py属于python中的第三方库函数。
所以,即使用apt,也是用apt去安装,更新python。
而python中的库,有自己的安装方法。
常见的是直接 setup.py install或者用pip之类的去安装。
具体安装的方法,自己去参考这个:
【待完善】【总结】Python安装第三方的库、package的方法
(此处不给贴地址,请用baidu搜标题,即可找到帖子地址)
python 移植到 arm 需要什么条件
如果arm下面的平台是Linux,那么可以直接安装。不过如果你需要通过python操作底层硬件,那么你需要自己编写一个模块去实现
如果arm下面是别的操作系统,或者是裸机,那么需要把python源代码重新进行编译,使用方法需要根据你的软件进行结合,这会比较麻烦
arm可以用python编程吗
不可以吧,没听说过这种应用。python语言是高级语言,是面向对象的,比较复杂。像arm这种操作寄存器的,一般用C语言比较低级的语言操作硬件。你想再arm上应用python语言写的应用程序,必须是在arm上加了系统,然后这个操作系统可以解析python语言(装解析软件。)。
python| 2021款 m1pro mbp python开发配置
m1m1pro 如何吊打老款 Intel mbp 就不多提了(发布会不点名, 以 友商 代称, 但是官网直接放具体型号, 这操作真6)
简单列一下2个重要的使用感受(2021 16寸 标配):
16寸标配与14寸标配3个重要区别:
由于 m1pro 采取 ARM 架构(ISA, 指令集架构, 详见上一篇blog: 极客时间-计组学习笔记一), 需要安装 ARM版/M1版 软件才能运行
查看 python官网 可知, ARM版python最低版本为 3.8 :
由于项目使用了 python3.6 版本, 根据 开发环境/测试环境应尽量和线上环境保持一致 , 所以分别尝试了 python3.8/python3.6 进行开发环境配置验证
本地进行 python 开发, 操作 so easy :
由于 requirements.txt 是 python3.6 下的, 部分包需要升级才能适配 python3.8
从 Pillow官网 可知: 升级 Pillow 到 8.4.0 版本后, 能支持 python3.6-python3.10
其他几个(pandas, numpy, grpcio)没有在官网找到对应的 python版本 兼容信息, 依靠测试来验证
最后在 python3.6 的老开发机, 基于更新后的 requirements.txt 文件安装依赖, 只有 pandas 库不支持
python3.6 没有支持 ARM版, 所以 m1pro mbp 本地跑 python3.6 这条路走不通, 需要使用 docker.
在 docker hub 上搜索, 有支持 arm64/v8 的镜像版本
采用构建开发环境镜像的老套路: 先在容器中run, 然后写 Dockerfile, 最后基于构建的新镜像验证
当然, 也可以将启动命令使用 ENTRYPOINT 指令添加到 Dcokerfile 中, 也可以使用 docker-compose.yml 来简化, 这些 so easy , 就不展开了
ARM 在桌面的平台的优势越来越明显了, 尤其是笔记本越来越成为开发主力. m1 作为先行者, 开了一个很好的头, 希望 RISC-V 也能带来更多惊喜
关于 docker 官网 python 镜像的版本, 稍微多说两句: 以 python:3.6-slim-buster 为例