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及第三方庫交叉編譯

推薦閱讀