标题:
如何在arm单板中压缩python详解(1)
[打印本页]
作者:
look_w
时间:
2017-10-24 21:37
标题:
如何在arm单板中压缩python详解(1)
注:下文的CSU是我们单板的名称。
1
前言
平时开发时,采用
NFS
我认为是最方便的方式,但是,如果哪一天真要用
python
程序直接在
CSU
上跑,
NFS
明显是不现实的,因此,必须要研究如何将
python
挤进
CSU
里。
2
方案思路
思路
1
:采用专业打包工具,例如
cx_Freeze
;
思路
2
:自己组建一个最小运行环境
2.1
打包思路
这种思路是将
python
程序变成可执行文件,并将用到的库放在一起,即不用安装
python
,也可以运行。
其实,我个人是最认同这种思路的,通过打包工具将
python
程序实际需要的库打包起来,可以做到最小的效果,而且还非常方便。
但是,打包工具面对交叉编译的环境,真不知道怎么弄。
我采用了可以跨平台的
cx_Freeze
,这个工具不仅支持
python2
与
python3
,而且支持
linux
、
windows
、
Mac OS
的系统。功能是比较强大的。我在
linux
和
windows
下都可以非常方便的打包
python
程序。
但是,如何打包
arm
的
python
程序,这个我真不会了,查阅了官方和论坛很多资料,都没有找到解决方案。我自己也尝试了很多方法,都没有成功,最纠结的地方在于:
如果在
pc
的
linux
上运行
cx_Freeze
打包,那么,会将
pc
版本的
python
相关的库和文件打包进来,如果将
python
的链接指向
arm
版本的
python
,
arm
版本的
python
又无法解析
cx_Freeze
的
setup
文件,这是个很矛盾的地方。而且,安装
cx_Freeze
中,需要用到
gcc
编译一些和平台相关的
.so
动态库文件,如何将
gcc
换成
arm-none-linux-gnueabi-gcc
也是个麻烦事,至少官方文档中没有说明,除非修改其安装源码。
那在
CSU
上安装
cx_Freeze
呢?安装倒是可以,选择的也是
arm
版本的
python
,但是,最关键的就是,运行中,需要用到
gcc
进行编译。
CSU
怎么在自身进行编译呢?这是个问题,如果这个关键问题解决了,估计可以迎刃而解。希望有人可以解决这个问题啊。
那看来没有办法了,只能使用思路
2
了。
2.2
组建最小环境思路
pc
版本的
python
,安装后有
70
多
M
,明显是放不进
CSU
的,因此,必须
(减肥)瘦身。
经过最终尝试,全功能环境只需要
6M
,最小环境只需要
1.2M
的空间即可。
3
研制最小环境
python
要瘦身,就必须理解
python
的文件结构。
安装路径下,真正在运行中用到着的只有
bin
和
lib
两个文件夹。
为了讲解不那么抽象,这里以
python2.7
为例进行陈述。
(为什么选择
2.7
呢,因为,我发现同样是打印
1000
次字符串,
CSU
环境下,
python2.7
比
python3.3
快了
3
倍速度。而且很多网络的第三方库都不支持
python3.3
。)
3.1
排除非必需文件
bin
文件夹中,只有
python2.7
这个文件,是真正用到的执行文件。
lib
中,只有
libpython2.7.so.1.0
和
python2.7
文件夹是真正用到着的。
其余的在大量的实验中,均发现是可以删除的。
(注意,如果
configure
中,采用静态库进行编译,那么是没有
libpython2.7.so.1.0
文件的,当然,这个文件的内容被放进执行程序中而已)
(采用动态库的好处是,其他程序可以使用
libpython
的库了,那谁会用到这个库呢,举例,大名鼎鼎的
vim
就会用到这个库。在虚拟机下,
ldd /usr/bin/vim
,可以看到
vim
使用的动态库中,就有
libpython
。如果
CSU
哪天需要安装
vim
,那么这个库是必要的)
(再啰嗦一下,
ubuntu
(
debian
系列的都是)默认将
python
库安装在
/usr/lib
路径下,将
site-packages
和
dist-packages
这两个专门存放用户第三方
python
库的文件夹放在
/usr/local/lib
路径下。如果你是自己下载源码包进行安装,默认都是安装在
/usr/local/lib
上的。这时,
/usr/lib
路径下就会有原有版本的
python
可以删除了,除了可以节省磁盘空间,还可以减少因为搜索路径问题带来的麻烦,我就碰到过。因此,建议删除原有的
/usr/lib
里面的
python
文件夹。但注意的是,不要删除
libpython
动态库,因为,其他程序,例如
vim
要用到,而
ubuntu
搜索默认库的路径是
/lib,/usr/lib
,因此,建议不要移动这几个
python
动态库。如果不幸被你删除了,可以在源码包重新三部曲,关键是
./configure --enable-shared --prefix=/usr
)
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0