Carte de développement Linux intégrée, compilation croisée de la bibliothèque tierce Python numpy via crossenv

1. Introduction

1.1 Brève description

  1. Lorsque vous utilisez pip pour installer la bibliothèque tierce de Python côté ARM, la carte de développement doit pouvoir accéder au réseau externe. Pour plus de détails sur la façon d'accéder à Internet sur la carte de développement, veuillez vous référer au blog : Carte de développement Linux embarquée, connectez-vous à l'ordinateur via un câble réseau, partagez le réseau sans fil de l'ordinateur et accédez au réseau externe.
  2. Ici, je compile d'abord curl pour demander au serveur Web. Ceci est principalement utilisé pour télécharger l'outil pip. Si votre carte de développement dispose de la commande curl, vous n'avez pas besoin de la compiler ; ou vous pouvez directement télécharger le package pip correspondant sur la carte de développement sur la page Web sans utiliser la commande curl.
  3. Ce blog est équivalent à une extension des travaux précédents sur Ubuntu, basée sur la plate-forme Qt, appelant des fichiers Python et compilant de manière croisée pour s'exécuter sur la carte de développement Linux embarquée . Avant, je n'avais compilé que Python de manière croisée et je n'avais pas compilé de bibliothèques tierces Python. Donc ici, il est déjà par défaut que vous avez un python compilé de manière croisée. Mon chemin de compilation croisée est : /home/book/arm-python ; le chemin de tous mes packages d'installation est /home/book/pyarm . Donc, si vous ne faites pas référence au python compilé de manière croisée sur mon blog, veuillez modifier vous-même le chemin qui apparaît dans la commande suivante par le chemin lié à la compilation croisée de python .

1.2 Contexte de la compilation

  1. Chaîne d'outils de compilation croisée : gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
  2. plateforme Ubuntu:ubuntu18.04.1 64 bits
  3. Noyau de la carte de développement Linux embarqué : NXP CORTEX-A7 IMX6ULL

1.3 Étapes

  1. Curl de compilation croisée
  2. Utilisez crossenv pour compiler de manière croisée la bibliothèque tierce Python numpy
  3. Porté sur la carte de développement Linux

2. Curl de compilation croisée

  1. Téléchargez curl, https://curl.se/download.html . Ici, j'utilise la dernière version curl-7.87.0.
  2. Décompresser : tar xzvf curl-7.87.0.tar.gz
  3. cd curl-7.87.0
  4. Configurez l'environnement de compilation : ./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 Remarque : ici, curl dépend de openssl
    et zlib. Pour cross-compiler openssl et zlib, vous pouvez vous référer au blog : Sous Ubuntu, basé sur la plateforme Qt, appelez le fichier python, cross-compilez-le sur la carte de développement Linux embarquée et exécutez-le
  5. faire
  6. faire installer
  7. Migrez tout le contenu de /home/book/pyarm/curl-7.87.0/tmp/ vers le répertoire de la carte de développement /home/book/arm-python. Parce que le répertoire de mon python compilé de manière croisée sur la carte de développement est /home/book/arm-python. Veuillez le modifier dans votre propre répertoire.

3. Utilisez crossenv pour compiler de manière croisée la bibliothèque tierce Python numpy

  1. Toutes les étapes ici sont effectuées dans Ubuntu, pas dans la carte de développement .
  2. L'ubuntu que j'utilise est livré avec python et python3. Généralement, la machine virtuelle installée Ubuntu est livrée avec python. Si ce n'est pas le cas de votre machine virtuelle, veuillez installer python3 en fonction du type de machine virtuelle. Par exemple, utilisez simplement la commande sur Ubuntu sudo apt-get install python3.
  3. Installez crossenv :pip3 install crossenv
  4. Utilisez crossenv pour représenter l'environnement virtuel d'arm-python :python3 -m crossenv --without-pip /home/book/arm-python/bin/python3 cross_venv
  5. cd cross_venv/cross/bin
  6. Activez l'environnement virtuel :source activate
  7. Téléchargez le package d'installation pip : curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k. Parce que la version de python3 dans mon Ubuntu est 3.6, j'ai téléchargé get-pip.py en 3.6.
  8. ./python3 get-pip.py
  9. Installez Cython dans l'environnement virtuel cross_venv :./pip3 install Cython
  10. Créez request.txt : vi requirements.txt, écrivez numpy et le numéro de version. La version que j'ai téléchargée ici est la 1.13.3, j'écris donc :
    insérer la description de l'image ici
  11. Compilez de manière croisée numpy dans un package d'installation au format .whl : ./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt. /home/book/arm-pylib est le chemin de stockage du package numpy au format .whl. Vous pouvez le choisir arbitrairement.
    Remarque : Étant donné que numpy hautes performances repose sur les bibliothèques lapack et atlas, lorsque vous utilisez directement la commande pip3 pour effectuer une compilation croisée de numpy, il recherchera les bibliothèques lapack et atlas, mais je n'ai pas trouvé de méthode appropriée pour effectuer une compilation croisée. la bibliothèque lapack ici. J'espère que vous le savez . Les partenaires sont généreux avec leurs conseils . Heureusement, ces deux bibliothèques ne sont pas des dépendances obligatoires pour l'installation du package NumPy. Autrement dit, numpy compilé sans s'appuyer sur les bibliothèques lapack et atlas fonctionne normalement, mais les performances sont légèrement moins bonnes.
    La solution est de définir la variable d'environnement avant la compilation pip3 :
export BLAS=None
export BLAS=None
export ATLAS=None
./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt
  1. résultat:
    insérer la description de l'image ici
  2. Notez qu'ici, nous utilisons crossenv pour compiler de manière croisée le suffixe de la bibliothèque tierce numpy est linux_arm, et notre carte cible est armv7l, nous devons donc ici modifier manuellement numpy-1.13.3-cp36-cp36m-linux_arm.whl en numpy-1.13.3-cp36-cp36m-linux_armv7l.whl. Sinon, une erreur sera signalée. Pour afficher l'architecture de la carte de développement Linux, utilisez la commande sur le terminal de commande de la carte de développement : uname -a.
    insérer la description de l'image ici

4. Transplantation vers la carte de développement Linux

  1. Migrez numpy-1.13.3-cp36-cp36m-linux_armv7l.whl vers le répertoire /home/book/arm-python/bin. Parce que le répertoire de mon python compilé de manière croisée sur la carte de développement est /home/book/arm-python/bin. Veuillez le modifier dans votre propre répertoire.
  2. Téléchargez pip3 :./curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k
  3. Installez pip3 : ./python3 get-pip.py
    Une erreur apparaîtra ici :
    Impossible de récupérer l'URL https://pypi.org/simple/pip/ : Un problème est survenu lors de la confirmation du certificat SSL : HTTPSConnectionPool(host='pypi. org ', port = 443) : nombre maximal de tentatives dépassé avec l'url : /simple/pip/ (causé par SSLError(SSLError(1, '[SSL : CERTIFICATE_VERIFY_FAILED] échec de la vérification du certificat (_ssl.c:852)'),)) - sauter
    ERREUR : impossible de trouver une version qui satisfait à l'exigence pip<22.0 (à partir des versions : aucune)
    ERREUR : aucune distribution correspondante trouvée pour pip<22.0

    signifie : impossible d'obtenir le contenu de la page Web https://pypi.org/simple /pip/ .
    Solution : Changer l'adresse miroir nationale .
    ./python3 get-pip.py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  4. Vérifiez pip3 : liste ./pip3
    insérer la description de l'image ici
  5. Installez numpy : ./pip3 install numpy-1.13.3-cp36-cp36m-linux_armv7l.whl -i http://pypi.douban.com/simple --trusted-host pypi.douban.com.
    Remarque : Si vous ne souhaitez pas spécifier la source de l'image pour chaque installation, vous pouvez vous référer au blog https://blog.csdn.net/qq591840685/article/details/116399374 pour créer un fichier pip.conf pour spécifier l'image source.
  6. Vérifiez numpy :
    insérer la description de l'image ici

5. Liens vers les articles de référence

  1. Erreur signalée lors de l'utilisation de pip : impossible de récupérer l'URL https://pypi.org/simple/selenium/ : un problème est survenu lors de la confirmation du ss
  2. compilation croisée de boucles
  3. [Python Notes] Comment compiler un package NumPy qui ne dépend pas des bibliothèques lapack et atlas
  4. Compilation croisée de bibliothèques Python et tierces

Je suppose que tu aimes

Origine blog.csdn.net/m0_43443861/article/details/128526455
conseillé
Classement