目次
1. はじめに
1.1 簡単な説明
- pip を使用して Python のサードパーティ ライブラリを ARM 側にインストールする場合、開発ボードは外部ネットワークにアクセスできる必要があります。開発ボードでインターネットにアクセスする方法の詳細については、ブログを参照してください: Embedded Linux 開発ボード、ネットワーク ケーブルを介してコンピュータに接続、コンピュータのワイヤレス ネットワークを共有、および外部ネットワークにアクセス
- ここではまず、curl をクロスコンパイルして Web サーバーをリクエストします。これは主に pip ツールをダウンロードするために使用されます。開発ボードにcurlコマンドがある場合は、それをコンパイルする必要はありません。または、curlコマンドを使用せずに、Webページ上の対応するpipパッケージを開発ボードに直接ダウンロードできます。
- このブログは、Qt プラットフォームに基づいて、Python ファイルを呼び出し、組み込み Linux 開発ボード上で実行するためにクロスコンパイルする、ubuntu での以前の作業の拡張版に相当します。以前は Python をクロスコンパイルしただけで、Python のサードパーティ ライブラリをコンパイルしませんでした。ここでは、Python をクロスコンパイルしていることがデフォルトになっています。私のクロスコンパイルされたパスは /home/book/arm-python です。すべてのインストール パッケージのパスは /home/book/pyarm です。
したがって、私のブログでクロスコンパイルされた Python について言及していない場合は、次のコマンドに表示されるパスを、クロスコンパイルされた Python に関連するパスに自分で変更してください。
1.2 コンパイルの背景
- クロスコンパイル ツール チェーン: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
- ubuntuプラットフォーム:ubuntu18.04.1 64bit
- 組み込み Linux 開発ボード カーネル: NXP CORTEX-A7 IMX6ULL
1.3 ステップ
- クロスコンパイルカール
- Crossenv を使用して Python サードパーティ ライブラリ numpy をクロスコンパイルする
- Linux開発ボードに移植
2. クロスコンパイルカール
- Curl をダウンロードします ( https://curl.se/download.html )。ここでは最新バージョンのcurl-7.87.0を使用します。
- 解凍: tar xzvfカール-7.87.0.tar.gz
- cd カール-7.87.0
- コンパイル環境を構成します: ./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --with-zlib= / home/book/arm-python --with-ssl=/home/book/arm-python --enable-shared --disable-threaded-resolver --prefix=$(pwd)/tmp 注: ここでは、curl は次のように依存します。 openssl
とzlib。openssl と zlib をクロスコンパイルするには、ブログを参照してください。Qtプラットフォームに基づいた ubuntu では、Python ファイルを呼び出し、組み込み Linux 開発ボードにクロスコンパイルして実行します。 - 作る
- インストールする
- /home/book/pyarm/curl-7.87.0/tmp/ 内のすべてのコンテンツを開発ボード ディレクトリ /home/book/arm-python に移行します。開発ボード上のクロスコンパイルされた Python のディレクトリは /home/book/arm-python であるためです。独自のディレクトリに変更してください。
3.crossenv を使用して Python サードパーティ ライブラリ numpy をクロスコンパイルします
- ここでのすべての手順は、開発ボードではなく、Ubuntu で実行されます。
- 私が使用している ubuntu には、Python と Python3 が付属しています。通常、インストールされる仮想マシン Ubuntu には Python が付属しますが、仮想マシンに付属していない場合は、仮想マシンの種類に応じて python3 をインストールしてください。たとえば、 ubuntu でコマンドを使用するだけです
sudo apt-get install python3
。 - Crossenv をインストールします。
pip3 install crossenv
- Crossenv を使用して arm-Python の仮想環境を表します。
python3 -m crossenv --without-pip /home/book/arm-python/bin/python3 cross_venv
cd cross_venv/cross/bin
- 仮想環境をアクティブ化します。
source activate
- pip インストール パッケージをダウンロードします
curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k
。私のubuntuのpython3のバージョンは3.6なので、3.6でget-pip.pyをダウンロードしました。 - ./python3 get-pip.py
- Cython を Cross_venv 仮想環境にインストールします。
./pip3 install Cython
- request.txt: を作成し
vi requirements.txt
、numpy とバージョン番号を書きます。ここでダウンロードしたバージョンは 1.13.3 なので、次のように書きます。
- numpy を .whl 形式のインストール パッケージにクロスコンパイルします
./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt
。/home/book/arm-pylib は .whl 形式の numpy パッケージの保存パスで、任意に選択できます。
注: 高性能の numpy は lapack ライブラリと atlas ライブラリに依存しているため、pip3 コマンドを直接使用して numpy をクロスコンパイルすると、lapack ライブラリと atlas ライブラリが検索されますが、クロスコンパイルに適した方法は見つかりませんでした。 Lapack ライブラリはここにあります。知っていただければ幸いです。パートナーは惜しみなくアドバイスを提供します。幸いなことに、これら 2 つのライブラリは NumPy パッケージのインストールに必須ではないため、lapack ライブラリや atlas ライブラリに依存せずにコンパイルされた numpy は正常に機能しますが、パフォーマンスは若干劣ります。
解決策は、pip3 をコンパイルする前に環境変数を設定することです。
export BLAS=None
export BLAS=None
export ATLAS=None
./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt
- 結果:
- ここでは、crossenv を使用して numpy サードパーティ ライブラリのサフィックスが linux_arm であり、ターゲット ボードが armv7l であるため、ここでは numpy-1.13.3-cp36-cp36m-linux_arm.whl を手動で変更する必要があることに注意してください。 numpy-1.13.3-cp36-cp36m-linux_armv7l.whl。それ以外の場合は、エラーが報告されます。Linux 開発ボードのアーキテクチャを表示するには、開発ボードのコマンド ターミナルで次のコマンドを使用します
uname -a
。
4. Linux開発ボードへの移植
- numpy-1.13.3-cp36-cp36m-linux_armv7l.whl をディレクトリ /home/book/arm-python/bin に移行します。開発ボード上のクロスコンパイルされた Python のディレクトリは /home/book/arm-python/bin であるためです。独自のディレクトリに変更してください。
- pip3 をダウンロードします。
./curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k
- pip3 をインストールします: ./python3 get-pip.py
ここにエラーが表示されます:
URL https://pypi.org/simple/pip/ を取得できませんでした: ssl 証明書の確認で問題が発生しました: HTTPSConnectionPool(host='pypi. org '、port=443): URL: /simple/pip/ で最大再試行回数を超えました (SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 証明書の検証に失敗しました (_ssl.c:852)'),) が原因です) -スキップ
エラー: 要件 pip<22.0 を満たすバージョンが見つかりませんでした (バージョンから: なし)
エラー: pip<22.0 に一致するディストリビューションが見つかりません
意味: Web ページ https://pypi.org/simple からコンテンツを取得できません/ピップ/。
解決策: 国内ミラーアドレスに変更します。
./python3 get-pip.py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
- pip3: ./pip3 リストを確認します
- numpy をインストールします: ./pip3 install numpy-1.13.3-cp36-cp36m-linux_armv7l.whl -i http://pypi.douban.com/simple --trusted-host pypi.douban.com。
注: インストールごとにイメージ ソースを指定したくない場合は、ブログhttps://blog.csdn.net/qq591840685/article/details/116399374を参照して、イメージを指定する pip.conf ファイルを作成できます。ソース。 - numpy を確認します。