python及第三方库交叉编译( 三 )


cp -rfp /home/libffi-3.2.1-target/libffi-target/* /home/python-target/
cp -rfp /home/openssl-1.0.2g-target/openssl-target/* /home/python-target/
6、设置CFLAGS: CFLAGS="-I/home/python-target/include -I/home/python-target/include/python3.5m -L/home/python-target/lib"
7、设置LDFLAGS: LDFLAGS="-L/home/python-target/lib"
8、vim Modules/Setup.dist

python及第三方库交叉编译

文章插图

python及第三方库交叉编译

文章插图
9、设置编译环境:注意这里我为了方便看,手动的给每个参数换行了,实际使用中不应该换行的
./configure CC=arm-buildroot-linux-gnueabihf-gcc CXX=arm-buildroot-linux-gnueabihf-g++ AR=arm-buildroot-linux-gnueabihf-ar RANLIB=arm-buildroot-linux-gnueabihf-ranlib --host=arm-buildroot-linux-gnueabihf --build=x86_64-linux-gnu --target=arm-buildroot-linux-gnueabihf --disable-ipv6 ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes --prefix=/home/python-target --without-ensurepip10、编译:make HOSTPYTHON=/home/python-build/bin/python3 HOSTPGEN=/home/python-3.5.2-build/Parser/pgen
   11、执行:make install HOSTPYTHON=/home/python-build/bin/python3
目前位置我们就在build主机上已经编译好了python-build和python-target
十五、通过crossenv交叉编译第三方库例如:numpy1、在build主机上使用python-build搭建python-target的虚拟环境,然后再虚拟环境中打包python-target的第三方库,这里以numpy为例:因为numpy是需要经过交叉编译才能使用的 。
2、cd /home/python-build/bin
3、安装crossenv: ./pip3 install crossenv
4、使用crossenv代表python-target的虚拟环境:./python3 -m crossenv --without-pip /home/python-target/bin/python3 cross_venv
5、cd cross_venv/cross/bin
6、激活虚拟环境:source activate
7、curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py -k
8、./python3 get-pip.py
9、在cross_venv这个虚拟环境中的安装Cython:./pip3 install Cython
10、创建文件夹用来存放编译后的第三方:mkdir /home/target_lib
11、创建requestments.txt:vim requirements.txt 里面写上numpy
python及第三方库交叉编译

文章插图
12、交叉编译第三方库成为.whl格式的安装包:./pip3 wheel --wheel-dir /home/target_lib -r requirements.txt
13、验证:cd /home/target_lib
python及第三方库交叉编译

文章插图
14、注意,这里我们使用crossenv交叉编译后的numpy第三方库的后缀是linux_arm,而我们的目标板子是armv7l的,所以这里我们要手动的将
numpy-1.18.5-cp35-cp35m-linux_arm.whl改为numpy-1.18.5-cp35-cp35m-linux_armv7l.whl 。不然会报错 。这个坑,一直坑了我一个月的时间,尝试了很多方法,不知道是编译链的问题,还是编译过程的问题 。将交叉编译后的numpy的.whl文件移植到目标板子的中 , 总是报错,突然灵光一闪 , 就手动改个名字,居然可以了,这坑简直是巨坑,坑了一个月的时间 。
十六、移植到目标板子将编译好的python-target打包 和 numpy-1.18.5-cp35-cp35m-linux_arm.whl(先不改名 , 移植到目标板子上在改名)移植到目标板子上
1、压缩python-target: tar cvf python-target.tar python-target
2、通过ftp工具,将python-target.tar和numpy-1.18.5-cp35-cp35m-linux_arm.whl ,移植到目标板子的/home下
python及第三方库交叉编译

文章插图
   3、解压python-target: tar xvf python-target.tar
4、cd /home/python-target/bin
5、验证在目标板子上运行python3
python及第三方库交叉编译

文章插图
6、验证交叉编译的第三方
1、先下载pip: curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py -k
2、安装pip: ./python3 get-pip.py
3、配置pip源
a、mkdir ~/.pip
b、vi ~/.pip/pip.conf
c、添加如下代码
[global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn4、验证pip
python及第三方库交叉编译

文章插图
5、通过pip安装未改名的numpy第三方库:这是会报错:numpy-1.18.5-cp35-cp35m-linux_arm.whl is not a supported wheel on this platform.
python及第三方库交叉编译

文章插图
6、改名:  mv /home/numpy-1.18.5-cp35-cp35m-linux_arm.whl /home/numpy-1.18.5-cp35-cp35m-linux_armv7l.whl
7、重新安装验证:
python及第三方库交叉编译

推荐阅读