Как установить последнюю версию PyFMI в архитектуре ARMv8 для работы в докер-контейнере поверх Raspberry Pi 4B

Некоторое время я пытаюсь установить PyFMI на Raspberry Pi 4B, используя контейнеры докеров. Мне как-то удается добиться успеха. Однако обновление солнечных часов по-прежнему отсутствует. Если кто-то может помочь найти обходной путь для его обновления, я буду признателен. На данный момент я опубликую то, что я сделал. Это может быть полезно для кого-то другого (даже если это не идеальное решение).

Проблема с PyFMI в том, что он недоступен для архитектуры ARMv8. Я попытался использовать в докере в качестве базового образа mini-forge (miniconda недоступен для ARMv8), но даже с этим образом можно было выполнить прямую установку с помощью команд conda (conda install -c conda-forge pyfmi). Итак, мне нужно было скомпилировать весь PyFMI из исходников. В качестве справки я использовал этот пост: PyFMI в среде Python 3 в Ubuntu 18.04

Следуя коду:

FROM  condaforge/miniforge3 AS compile-image
ENV TZ=America/Montreal
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get -y update && apt-get -y upgrade \
        && apt-get install -y libblas-dev \
        liblapack-dev           \
        libopenblas-dev         \
        python3-dev             \
        libatlas-base-dev       \
        libblas-dev             \
        gcc                     \       
        g++                     \
        build-essential         \         
        zlib1g-dev              \
        gfortran                \
        autoconf                \       
        automake                \       
        bzip2                   \       
        dpkg-dev                \       
        file                    \
        cmake                   \
        git                     \
        # Additional requirements for EnergyPlustoFMU
        ca-certificates         \
        libxslt-dev             \
        swig                    \
        libssl-dev              \
        tree                    \
        libx11-6                \
        curl                    \
        tar 

RUN pip install numpy
RUN pip install Cython
RUN pip install pandas
RUN pip install scipy
# RUN conda install -c conda-forge pyfmi # miniforge is not able to find the package.

# Manually compile all needed packages for PyFMI
# Source: https://stackoverflow.com/questions/59582257/pyfmi-in-python-3-environment-in-ubuntu-18-04 

# Add FMI Library  
WORKDIR /
RUN mkdir ./FMILibraryInstaller
RUN git clone https://github.com/modelon-community/fmi-library.git FMILibraryInstaller
RUN ls -lha
WORKDIR /FMILibraryInstaller
RUN mkdir ./buildcmake
WORKDIR /FMILibraryInstaller/buildcmake
# Variable DFMILIB_INSTALL_PREFIX defines the directory of installation
RUN cmake -DFMILIB_INSTALL_PREFIX=/usr/local/FMILibrary /FMILibraryInstaller/
RUN make install 
# Create enviroment variable for PyFMI installation (Required for posterior installation of PyFMI).
ENV FMIL_HOME=/usr/local/FMILibrary

# Add sundials Library 
WORKDIR /
RUN mkdir /SundialsInstaller
WORKDIR /SundialsInstaller
RUN wget https://github.com/LLNL/sundials/archive/refs/tags/v4.1.0.tar.gz 
RUN mkdir buildtar
WORKDIR /SundialsInstaller/buildtar
RUN tar -xf /SundialsInstaller/v4.1.0.tar.gz
RUN ls -lha
WORKDIR /SundialsInstaller/buildtar/sundials-4.1.0
RUN mkdir buildcmake
WORKDIR /SundialsInstaller/buildtar/sundials-4.1.0/buildcmake
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/Sundials /SundialsInstaller/buildtar/sundials-4.1.0
RUN make install

# Add lapack Library 
WORKDIR /
RUN mkdir /LapackInstaller
RUN git clone https://github.com/Reference-LAPACK/lapack-release.git LapackInstaller
RUN ls -lha
WORKDIR /LapackInstaller
RUN mkdir ./buildcmake
WORKDIR /LapackInstaller/buildcmake
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/Lapack /LapackInstaller
RUN make install

# Add assimulo Library 
WORKDIR /
RUN mkdir /AssimuloInstaller
RUN git clone https://github.com/modelon-community/Assimulo.git AssimuloInstaller 
WORKDIR /AssimuloInstaller
RUN ls -lha
RUN python setup.py install --sundials-home=/usr/local/Sundials 
# --blas-home=/usr/local/Lapack/lib --lapack-home=/usr/local/Lapack

# Add PyFMI
# FMIL_HOME is an ambient variable. Needs to be exposed so it can be found for the PyFMI installer.  
RUN export FMIL_HOME=/FMILibraryInstaller/buildcmake
WORKDIR /
RUN git clone https://github.com/modelon-community/PyFMI.git PyFMIInstaller
WORKDIR /PyFMIInstaller
RUN ls -lha
RUN python setup.py install --fmil-home=/usr/local/FMILibrary

Пара вещей, на которые следует обратить внимание:

  • Переменная среды TZ определена, чтобы избежать ручного ввода ее значения при установке Ubuntu.
  • Создайте переменную среды с путем к библиотеке FMI.
  • Самая последняя версия солнечных часов несовместима с самой последней версией Assimulo. При установке Assimulo запрашивается файл с именем sundials_sparse.h, которого нет в последней версии Солнечных часов. Поэтому вместо него установлена ​​версия 4.1.
  • Для установки Assimulo необходимо указать путь солнечных часов, бла и лапака. Однако без прямого указания корневых каталогов установка завершится нормально.
  • PyFMI требует указать путь к библиотеке FMI и переменную среды пути.

Если кто-то найдет, как установить последнюю версию солнечных часов, я буду очень признателен. Или, что еще лучше, если кто-то сможет создать прямую установку PyFMI для архитектуры ARMv8 в conda-forge, будет еще лучше.

Спасибо!


person Juanca Oviedo    schedule 17.06.2021    source источник