組み込み Linux 開発ボード、crossenv を介した Python サードパーティ ライブラリ numpy のクロスコンパイル

1. はじめに

1.1 簡単な説明

  1. pip を使用して Python のサードパーティ ライブラリを ARM 側にインストールする場合、開発ボードは外部ネットワークにアクセスできる必要があります。開発ボードでインターネットにアクセスする方法の詳細については、ブログを参照してください: Embedded Linux 開発ボード、ネットワーク ケーブルを介してコンピュータに接続、コンピュータのワイヤレス ネットワークを共有、および外部ネットワークにアクセス
  2. ここではまず、curl をクロスコンパイルして Web サーバーをリクエストします。これは主に pip ツールをダウンロードするために使用されます。開発ボードにcurlコマンドがある場合は、それをコンパイルする必要はありません。または、curlコマンドを使用せずに、Webページ上の対応するpipパッケージを開発ボードに直接ダウンロードできます。
  3. このブログは、Qt プラットフォームに基づいて、Python ファイルを呼び出し、組み込み Linux 開発ボード上で実行するためにクロスコンパイルする、ubuntu での以前の作業の拡張版に相当します。以前は Python をクロスコンパイルしただけで、Python のサードパーティ ライブラリをコンパイルしませんでした。ここでは、Python をクロスコンパイルしていることがデフォルトになっています。私のクロスコンパイルされたパスは /home/book/arm-python です。すべてのインストール パッケージのパスは /home/book/pyarm ですしたがって、私のブログでクロスコンパイルされた Python について言及していない場合は、次のコマンドに表示されるパスを、クロスコンパイルされた Python に関連するパスに自分で変更してください

1.2 コンパイルの背景

  1. クロスコンパイル ツール チェーン: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
  2. ubuntuプラットフォーム:ubuntu18.04.1 64bit
  3. 組み込み Linux 開発ボード カーネル: NXP CORTEX-A7 IMX6ULL

1.3 ステップ

  1. クロスコンパイルカール
  2. Crossenv を使用して Python サードパーティ ライブラリ numpy をクロスコンパイルする
  3. Linux開発ボードに移植

2. クロスコンパイルカール

  1. Curl をダウンロードします ( https://curl.se/download.html )ここでは最新バージョンのcurl-7.87.0を使用します。
  2. 解凍: tar xzvfカール-7.87.0.tar.gz
  3. cd カール-7.87.0
  4. コンパイル環境を構成します: ./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 開発ボードにクロスコンパイルして実行します。
  5. 作る
  6. インストールする
  7. /home/book/pyarm/curl-7.87.0/tmp/ 内のすべてのコンテンツを開発ボード ディレクトリ /home/book/arm-python に移行します。開発ボード上のクロスコンパイルされた Python のディレクトリは /home/book/arm-python であるためです。独自のディレクトリに変更してください。

3.crossenv を使用して Python サードパーティ ライブラリ numpy をクロスコンパイルします

  1. ここでのすべての手順は、開発ボードではなく、Ubuntu で実行されます
  2. 私が使用している ubuntu には、Python と Python3 が付属しています。通常、インストールされる仮想マシン Ubuntu には Python が付属しますが、仮想マシンに付属していない場合は、仮想マシンの種類に応じて python3 をインストールしてください。たとえば、 ubuntu でコマンドを使用するだけですsudo apt-get install python3
  3. Crossenv をインストールします。pip3 install crossenv
  4. Crossenv を使用して arm-Python の仮想環境を表します。python3 -m crossenv --without-pip /home/book/arm-python/bin/python3 cross_venv
  5. cd cross_venv/cross/bin
  6. 仮想環境をアクティブ化します。source activate
  7. 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をダウンロードしました。
  8. ./python3 get-pip.py
  9. Cython を Cross_venv 仮想環境にインストールします。./pip3 install Cython
  10. request.txt: を作成しvi requirements.txt、numpy とバージョン番号を書きます。ここでダウンロードしたバージョンは 1.13.3 なので、次のように書きます。
    ここに画像の説明を挿入します
  11. 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
  1. 結果:
    ここに画像の説明を挿入します
  2. ここでは、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開発ボードへの移植

  1. numpy-1.13.3-cp36-cp36m-linux_armv7l.whl をディレクトリ /home/book/arm-python/bin に移行します。開発ボード上のクロスコンパイルされた Python のディレクトリは /home/book/arm-python/bin であるためです。独自のディレクトリに変更してください。
  2. pip3 をダウンロードします。./curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k
  3. 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
  4. pip3: ./pip3 リストを確認します
    ここに画像の説明を挿入します
  5. 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 ファイルを作成できます。ソース。
  6. numpy を確認します。
    ここに画像の説明を挿入します

5. 参考記事リンク

  1. pip を使用して報告されたエラー: URL https://pypi.org/simple/selenium/ を取得できませんでした: ss の確認に問題が発生しました
  2. カールクロスコンパイル
  3. 【Pythonメモ】lapackやatlasライブラリに依存しないNumPyパッケージのコンパイル方法
  4. Python とサードパーティのライブラリのクロスコンパイル

おすすめ

転載: blog.csdn.net/m0_43443861/article/details/128526455