python3交叉编译

基于AM335X交叉编译python3

    • 一、交叉编译python
    • 二、移植到目标机器
    • 三、添加第三方库
    • 四、精简python

一、交叉编译python

本人选择的是python-3.6.6,网上有很多关于2.7的交叉编译,要求较多,个人建议从3.5以后的版本开始,成功率更高一些,但相对的容量也会偏高;先下载、解压python源码,输入一下命令:
cd Python-3.6.6
  vi Modules/Setup.dist,将一些必要的模块释放出来[**通过将去掉"#"**]

./configure CC=arm-arago-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ AR=arm-arago-linux-gnueabi-ar RANLIB=arm-arago-linux-gnueabi-ranlib --host=arm-arago-linux-gnueabi --build=arm --disable-ipv6 --prefix=/optarm_python ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=no --eable-loadable-sqlite-extensions
make & make install

**第一次编译可能会出现“subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1 ”错误 ,执行 rm /usr/bin/lsb_release**
编译成功后,在/opt/arm_python目录下可以看到生成的bin,lib,include,share文件夹。

二、移植到目标机器

上述编译方式是动态编译,生成的文件较大,不建议直接打包到目标板上,下面是我的测试步骤:

  1. cp -r /opt/arm_python /nfsroot (nfsroot目录是我的挂载目录)
  2. 到目标板上,将虚拟机中的nfsroot挂载到/mnt下命令为:mount -t nfs 虚拟机IP:/nfsroot /mnt -o nolock
  3. cd /mnt/arm_python,输入./python3.6 回车看效果。
  4. 如果提示缺少zlib库,自己交叉编译,将缺少的lib库放到/usr/lib下即可。

三、添加第三方库

添加第三方库,需要自己虚拟机的python版本高于交叉编译的版本,并且支持pip 和python setup.py功能;一般是下载第三方库的源码包,解压进入主目录,执行python3 setup.py install --prefix=/opt/arm_python,一般出现的问题有:

  1. 缺少setuptools模块,说明当前的python不支持setup.py install 功能,解决办法:去python官网下载get-pip.py文件 ,接着执行 python3 get-pip.py,安装成功后在进行。
  2. 提示/opt/arm_python不是正确的安装路径,此时需要将你的安装路径设置到环境变量里,如:export PYTHONPATH=$PYTHONPATH:/opt/arm_python/lib/python3.6/site-packages,这是我的安装路径,接着重新执行python setup.py install --prefix=/opt/arm_python。

提示,关于第三方库的安装,目前只测试了不带.c文件的简单库如bottle(一款web框架,没有其他的.c文件的依赖),否则可能需要对第三方库进行交叉编译后,再进行安装操作。

四、精简python

这一块,目前还在研究,网上查了很多资料,但还未有更好的方法,同时也欢迎大家留言,讨论!

你可能感兴趣的:(linux,arm,linux,python)