Placa de desarrollo de Linux integrada, biblioteca de terceros de Python de compilación cruzada numpy a través de crossenv

1. Introducción

1.1 Breve descripción

  1. Cuando se usa pip para instalar la biblioteca de terceros de Python en el lado ARM, la placa de desarrollo debe poder acceder a la red externa. Para obtener detalles sobre cómo acceder a Internet en la placa de desarrollo, consulte el blog: Placa de desarrollo de Linux integrada, conectarse a la computadora a través de un cable de red, compartir la red inalámbrica de la computadora y acceder a la red externa.
  2. Aquí primero hago una compilación cruzada de curl para solicitar el servidor web. Esto se utiliza principalmente para descargar la herramienta pip. Si su placa de desarrollo tiene el comando curl, no necesita compilarlo; o puede descargar directamente el paquete pip correspondiente a la placa de desarrollo en la página web sin usar el comando curl.
  3. Este blog es equivalente a una extensión del trabajo anterior en ubuntu, basado en la plataforma Qt, que llama archivos python y realiza una compilación cruzada para ejecutarlos en la placa de desarrollo integrada de Linux . Antes solo compilé Python de forma cruzada y no compilé bibliotecas de terceros de Python. Así que aquí ya está predeterminado que tienes Python compilado de forma cruzada. Mi ruta de compilación cruzada es: /home/book/arm-python; la ruta de todos mis paquetes de instalación es /home/book/pyarm . Entonces, si no se refiere a Python con compilación cruzada en mi blog, modifique usted mismo la ruta que aparece en el siguiente comando por la ruta relacionada con la compilación cruzada de Python .

1.2 Antecedentes de compilación

  1. Cadena de herramientas de compilación cruzada: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
  2. plataforma ubuntu: ubuntu18.04.1 64 bits
  3. Núcleo de placa de desarrollo de Linux integrado: NXP CORTEX-A7 IMX6ULL

1.3 Pasos

  1. Curl de compilación cruzada
  2. Utilice crossenv para realizar una compilación cruzada de la biblioteca de terceros de Python numpy
  3. Portado a la placa de desarrollo de Linux

2. Curl de compilación cruzada

  1. Descargue curl, https://curl.se/download.html . Aquí utilizo la última versión curl-7.87.0.
  2. Descomprimir: tar xzvf curl-7.87.0.tar.gz
  3. cd curl-7.87.0
  4. Configure el entorno de compilación: ./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 Nota: aquí curl depende de openssl
    y zlib. Para realizar una compilación cruzada de openssl y zlib, puede consultar el blog : En ubuntu, basado en la plataforma Qt, llame al archivo Python, compílelo en la placa de desarrollo de Linux integrada y ejecútelo.
  5. hacer
  6. hacer la instalación
  7. Migre todo el contenido en /home/book/pyarm/curl-7.87.0/tmp/ al directorio de la placa de desarrollo /home/book/arm-python. Porque el directorio de mi Python compilado de forma cruzada en la placa de desarrollo es /home/book/arm-python. Modifíquelo a su propio directorio.

3. Utilice crossenv para realizar una compilación cruzada de la biblioteca de terceros de Python numpy

  1. Todos los pasos aquí se realizan en Ubuntu, no en la placa de desarrollo .
  2. El ubuntu que uso viene con python y python3. Generalmente, la máquina virtual instalada Ubuntu viene con Python. Si su máquina virtual no lo tiene, instale python3 de acuerdo con el tipo de máquina virtual. Por ejemplo, simplemente use el comando en ubuntu sudo apt-get install python3.
  3. Instalar crossenv:pip3 install crossenv
  4. Utilice crossenv para representar el entorno virtual de arm-python:python3 -m crossenv --without-pip /home/book/arm-python/bin/python3 cross_venv
  5. cd cross_venv/cross/bin
  6. Activar el entorno virtual:source activate
  7. Descargue el paquete de instalación de pip: curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k. Debido a que la versión de python3 en mi ubuntu es 3.6, descargué get-pip.py en 3.6.
  8. ./python3 get-pip.py
  9. Instale Cython en el entorno virtual cross_venv:./pip3 install Cython
  10. Cree request.txt:, vi requirements.txtescriba numpy y el número de versión en él. La versión que descargué aquí es 1.13.3, así que escribo:
    Insertar descripción de la imagen aquí
  11. Compile numpy en un paquete de instalación en formato .whl: ./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt. /home/book/arm-pylib es la ruta de almacenamiento del paquete numpy en formato .whl, puede elegirla arbitrariamente.
    Nota : Debido a que numpy de alto rendimiento depende de las bibliotecas lapack y atlas, cuando usa directamente el comando pip3 para realizar una compilación cruzada de numpy, buscará las bibliotecas lapack y atlas, pero no he encontrado un método adecuado para realizar la compilación cruzada. La biblioteca de Lapack aquí. Espero que lo sepas . Los socios son generosos con sus consejos . Afortunadamente, estas dos bibliotecas no son dependencias obligatorias para instalar el paquete NumPy, es decir, numpy compilado sin depender de las bibliotecas lapack y atlas funciona normalmente, pero el rendimiento es ligeramente peor.
    La solución es configurar la variable de entorno antes de la compilación de pip3 :
export BLAS=None
export BLAS=None
export ATLAS=None
./pip3 wheel --wheel-dir /home/book/arm-pylib -r requirements.txt
  1. resultado:
    Insertar descripción de la imagen aquí
  2. Tenga en cuenta que aquí usamos crossenv para realizar una compilación cruzada del sufijo de la biblioteca de terceros numpy es linux_arm, y nuestro tablero de destino es armv7l, por lo que aquí tenemos que cambiar manualmente numpy-1.13.3-cp36-cp36m-linux_arm.whl a numpy-1.13.3-cp36-cp36m-linux_armv7l.whl. De lo contrario, se informará un error. Para ver la arquitectura de la placa de desarrollo de Linux, utilice el comando en el terminal de comandos de la placa de desarrollo: uname -a.
    Insertar descripción de la imagen aquí

4. Trasplante a la placa de desarrollo de Linux

  1. Migre numpy-1.13.3-cp36-cp36m-linux_armv7l.whl al directorio /home/book/arm-python/bin. Porque el directorio de mi Python compilado de forma cruzada en la placa de desarrollo es /home/book/arm-python/bin. Modifíquelo a su propio directorio.
  2. Descargar pip3:./curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py -k
  3. Instale pip3: ./python3 get-pip.py
    Aquí aparecerá un error :
    No se pudo recuperar la URL https://pypi.org/simple/pip/: Hubo un problema al confirmar el certificado SSL: HTTPSConnectionPool(host='pypi. org ', puerto=443): Número máximo de reintentos superados con la URL: /simple/pip/ (causado por SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] verificación fallida del certificado (_ssl.c:852)'),)) - omitiendo
    ERROR: No se pudo encontrar una versión que satisfaga el requisito pip<22.0 (de versiones: ninguna)
    ERROR: No se encontró una distribución coincidente para pip<22.0

    significa: No se puede obtener contenido de la página web https://pypi.org/simple /pip/ .
    Solución: cambie a la dirección espejo nacional .
    ./python3 get-pip.py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  4. Verificar pip3: lista ./pip3
    Insertar descripción de la imagen aquí
  5. Instale numpy: ./pip3 instale numpy-1.13.3-cp36-cp36m-linux_armv7l.whl -i http://pypi.douban.com/simple --trusted-host pypi.douban.com.
    Nota : si no desea especificar la fuente de la imagen para cada instalación, puede consultar el blog https://blog.csdn.net/qq591840685/article/details/116399374 para crear un archivo pip.conf para especificar la imagen. fuente.
  6. Verificar números:
    Insertar descripción de la imagen aquí

5. Enlaces a artículos de referencia

  1. Error informado al usar pip: no se pudo recuperar la URL https://pypi.org/simple/selenium/: hubo un problema al confirmar el ss
  2. compilación cruzada de rizos
  3. [Notas de Python] Cómo compilar un paquete NumPy que no dependa de las bibliotecas lapack y atlas
  4. Compilación cruzada de bibliotecas de Python y de terceros.

Supongo que te gusta

Origin blog.csdn.net/m0_43443861/article/details/128526455
Recomendado
Clasificación