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
<
s
p
a
n
c
l
a
s
s
=
"
h
l
j
s
−
k
e
y
w
o
r
d
"
>
e
x
p
o
r
t
<
/
s
p
a
n
>
P
Y
T
H
O
N
H
O
M
E
=
<
s
p
a
n
c
l
a
s
s
=
"
h
l
j
s
−
r
e
g
e
x
p
"
>
/
l
i
b
/
<
/
s
p
a
n
>
p
y
t
h
o
n
2
<
s
p
a
n
c
l
a
s
s
=
"
h
l
j
s
−
n
u
m
b
e
r
"
>
.
7
<
/
s
p
a
n
>
:
PYTHONPATH <span class="hljs-keyword">export</span> PYTHONHOME=<span class="hljs-regexp">/lib/</span>python2<span class="hljs-number">.7</span>:
PYTHONPATH<spanclass="hljs−keyword">export</span>PYTHONHOME=<spanclass="hljs−regexp">/lib/</span>python2<spanclass="hljs−number">.7</span>:PYTHONHOME
如果是命令行,执行如下:
export PYTHONPATH=
P
Y
T
H
O
N
P
A
T
H
<
s
p
a
n
c
l
a
s
s
=
"
h
l
j
s
−
s
y
m
b
o
l
"
>
:
/
l
i
b
/
p
y
t
h
o
n
2
<
/
s
p
a
n
>
.
<
s
p
a
n
c
l
a
s
s
=
"
h
l
j
s
−
n
u
m
b
e
r
"
>
7
<
/
s
p
a
n
>
e
x
p
o
r
t
P
Y
T
H
O
N
H
O
M
E
=
PYTHONPATH<span class="hljs-symbol">:/lib/python2</span>.<span class="hljs-number">7</span> export PYTHONHOME=
PYTHONPATH<spanclass="hljs−symbol">:/lib/python2</span>.<spanclass="hljs−number">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 文件。