移植Python2.7到ARM-LINUX嵌入式平台

xz -d Python-2.7.3.tar.xz
tar xvf Python-2.7.3.tar

编译HOST版解释器

编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出HOST的解释器。

./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean

打交叉编译补丁

点击下载补丁

patch -p1 < Python-2.7.3-xcompile.patch

交叉编译配置

设置交叉编译工具链为arm-none-linux-gnueabi,编译生成的执行文件存放目录为当前目录的_install文件夹。

./configure --host=arm-none-linux-gnueabi –prefix=KaTeX parse error: Expected 'EOF', got '&' at position 137: …px;"><strong>编译&̲amp;安装</strong>…PWD/_install

执行完以上命令之后在_install中产生bin lib include share 4个文件夹,避免麻烦可以将以上命令写成一个脚本。

目标板文件拷贝

将_install/bin 中的所有内容拷贝到目标板的任意环境变量能够访问到的目录即可,推荐/bin、/usr/bin。

将_install/lib 中的所有内容拷贝到目标板/lib中

将_install /include 中的所有内容拷贝到目标板/include中。因为其中的某些头文件是Python环境所需要的,比如Python解释器启动依赖于pyconfig.h,import time模块时依赖timefuncs.h。

环境变量设置

将python2.7路径加入到环境变量 PYTHONHOME、PYTHONPATH中。

如果是/etc/profile,在文件末尾添加如下信息然后执行 source /etc/profile。

export PYTHONPATH=/lib/python2.7:
     
     
      
       
        
        
          P 
         
        
          Y 
         
        
          T 
         
        
          H 
         
        
          O 
         
        
          N 
         
        
          P 
         
        
          A 
         
        
          T 
         
        
          H 
         
        
          &lt; 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          c 
         
        
          l 
         
        
          a 
         
        
          s 
         
        
          s 
         
        
          = 
         
        
          &quot; 
         
        
          h 
         
        
          l 
         
        
          j 
         
        
          s 
         
        
          − 
         
        
          k 
         
        
          e 
         
        
          y 
         
        
          w 
         
        
          o 
         
        
          r 
         
        
          d 
         
        
          &quot; 
         
        
          &gt; 
         
        
          e 
         
        
          x 
         
        
          p 
         
        
          o 
         
        
          r 
         
        
          t 
         
        
          &lt; 
         
        
          / 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          &gt; 
         
        
          P 
         
        
          Y 
         
        
          T 
         
        
          H 
         
        
          O 
         
        
          N 
         
        
          H 
         
        
          O 
         
        
          M 
         
        
          E 
         
        
          = 
         
        
          &lt; 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          c 
         
        
          l 
         
        
          a 
         
        
          s 
         
        
          s 
         
        
          = 
         
        
          &quot; 
         
        
          h 
         
        
          l 
         
        
          j 
         
        
          s 
         
        
          − 
         
        
          r 
         
        
          e 
         
        
          g 
         
        
          e 
         
        
          x 
         
        
          p 
         
        
          &quot; 
         
        
          &gt; 
         
        
          / 
         
        
          l 
         
        
          i 
         
        
          b 
         
        
          / 
         
        
          &lt; 
         
        
          / 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          &gt; 
         
        
          p 
         
        
          y 
         
        
          t 
         
        
          h 
         
        
          o 
         
        
          n 
         
        
          2 
         
        
          &lt; 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          c 
         
        
          l 
         
        
          a 
         
        
          s 
         
        
          s 
         
        
          = 
         
        
          &quot; 
         
        
          h 
         
        
          l 
         
        
          j 
         
        
          s 
         
        
          − 
         
        
          n 
         
        
          u 
         
        
          m 
         
        
          b 
         
        
          e 
         
        
          r 
         
        
          &quot; 
         
        
          &gt; 
         
        
          . 
         
        
          7 
         
        
          &lt; 
         
        
          / 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          &gt; 
         
        
          : 
         
        
       
         PYTHONPATH &lt;span class=&quot;hljs-keyword&quot;&gt;export&lt;/span&gt; PYTHONHOME=&lt;span class=&quot;hljs-regexp&quot;&gt;/lib/&lt;/span&gt;python2&lt;span class=&quot;hljs-number&quot;&gt;.7&lt;/span&gt;: 
        
      
     
     PYTHONPATH<spanclass="hljskeyword">export</span>PYTHONHOME=<spanclass="hljsregexp">/lib/</span>python2<spanclass="hljsnumber">.7</span>:PYTHONHOME

如果是命令行,执行如下:

export PYTHONPATH=
     
     
      
       
        
        
          P 
         
        
          Y 
         
        
          T 
         
        
          H 
         
        
          O 
         
        
          N 
         
        
          P 
         
        
          A 
         
        
          T 
         
        
          H 
         
        
          &lt; 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          c 
         
        
          l 
         
        
          a 
         
        
          s 
         
        
          s 
         
        
          = 
         
        
          &quot; 
         
        
          h 
         
        
          l 
         
        
          j 
         
        
          s 
         
        
          − 
         
        
          s 
         
        
          y 
         
        
          m 
         
        
          b 
         
        
          o 
         
        
          l 
         
        
          &quot; 
         
        
          &gt; 
         
        
          : 
         
        
          / 
         
        
          l 
         
        
          i 
         
        
          b 
         
        
          / 
         
        
          p 
         
        
          y 
         
        
          t 
         
        
          h 
         
        
          o 
         
        
          n 
         
        
          2 
         
        
          &lt; 
         
        
          / 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          &gt; 
         
        
          . 
         
        
          &lt; 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          c 
         
        
          l 
         
        
          a 
         
        
          s 
         
        
          s 
         
        
          = 
         
        
          &quot; 
         
        
          h 
         
        
          l 
         
        
          j 
         
        
          s 
         
        
          − 
         
        
          n 
         
        
          u 
         
        
          m 
         
        
          b 
         
        
          e 
         
        
          r 
         
        
          &quot; 
         
        
          &gt; 
         
        
          7 
         
        
          &lt; 
         
        
          / 
         
        
          s 
         
        
          p 
         
        
          a 
         
        
          n 
         
        
          &gt; 
         
        
          e 
         
        
          x 
         
        
          p 
         
        
          o 
         
        
          r 
         
        
          t 
         
        
          P 
         
        
          Y 
         
        
          T 
         
        
          H 
         
        
          O 
         
        
          N 
         
        
          H 
         
        
          O 
         
        
          M 
         
        
          E 
         
        
          = 
         
        
       
         PYTHONPATH&lt;span class=&quot;hljs-symbol&quot;&gt;:/lib/python2&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt; export PYTHONHOME= 
        
      
     
     PYTHONPATH<spanclass="hljssymbol">:/lib/python2</span>.<spanclass="hljsnumber">7</span>exportPYTHONHOME=PYTHONHOME:/lib/python2.7

验证目标板Python

打开解释器,import 一些常用模块,编写程序测试。


后记

可能import time、datetime、threading、multiprocessing时提示缺少time、_collections、itertools等模块。

这些是 builtin 模块,可以通过sys.builtin_module_names查看。其源码在Modules目录中,编译完成以 .so 的形式存放在/lib/python2.7/lib-dynload中。

首先在setup.py中 disabled_module_list=[] 是否将这些模块disabled掉了。

如果依然无法解决,则在Modules/config.c中参考其他模块的写法添加代码,手动编译即可在build/lib.xx.2.7目录中产生 .so 文件。


    



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值