PYNQ2.3にPandasをインストールする


訳あって自分でZYBO-Z7-20向けにSDカードビルドしたPYNQ2.3にPandasをインストールしようとしたところバージョン不整合でうまくいかなかった(2020年12月現在)ので、バージョンを指定してインストールすることで問題解決をしましたので、情報共有します。
問題解決の経緯も書いておきますので、ご参考まで。

PYNQ2.3は2018年9月にリリースしたようです。

ビットストリームを書き込むために、Overlayをimportしようとすると、以下のようにModuleNotFoundError: No module named 'pandas'といわれて、実行できません。

test.py
#! /usr/bin/python3.6
# -*- coding: utf-8 -*-

from pynq import Overlay
root@pynq:~# python3 test.py 
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    from pynq import Overlay
  File "/usr/local/lib/python3.6/dist-packages/pynq/__init__.py", line 45, in <module>
    from .pmbus import get_rails
  File "/usr/local/lib/python3.6/dist-packages/pynq/pmbus.py", line 31, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'

そのため、Pandasをインストールしようとしたのですが、現時点でpipインストールしようとすると、下記のエラーでインストールできません。(最新版の1.1.5をインストールしようとしているようです。)

root@pynq:~# pip3 install pandas
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/fb/e4/828bb9c2474ff6016e5ce96a78220d485436d5468c23068f4f6c2eb9cff8/pandas-1.1.5.tar.gz (5.2MB)
    100% |????????????????????????????????| 5.2MB 25kB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-2ja6drqy/pandas/setup.py", line 793, in <module>
        setup_package()
      File "/tmp/pip-build-2ja6drqy/pandas/setup.py", line 763, in setup_package
        ext_modules=maybe_cythonize(extensions, compiler_directives=directives),
      File "/tmp/pip-build-2ja6drqy/pandas/setup.py", line 517, in maybe_cythonize
        f"Cannot cythonize with old Cython version ({_CYTHON_VERSION} "
    RuntimeError: Cannot cythonize with old Cython version (0.26.1 installed, needs 0.29.21)

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-2ja6drqy/pandas/

どうやら、Cythonが古いのが問題のようです。ということで、Cythonのアップデートを試みました。

root@pynq:~# pip3 install -U cython
Collecting cython
  Downloading https://files.pythonhosted.org/packages/ad/4b/9e53bcce3c959fd0db143626e573210bba07be810fe8d7296373948c4183/Cython-0.29.21-py2.py3-none-any.whl (974kB)
    100% |????????????????????????????????| 983kB 133kB/s 
Installing collected packages: cython
  Found existing installation: Cython 0.26.1
    Not uninstalling cython at /usr/lib/python3/dist-packages, outside environment /usr
Successfully installed cython-0.29.21

ということで無事Cythonが最新版になりました。

再度Pandasのインストールを試みましたが、、、

root@pynq:~# pip3 install pandas

「Python3.7以上が必要」、というエラーでインストールできませんでした。
確かにPandasの公式WEBサイトを見ると、要求バージョンがPython3.7です。
PYNQ2.3のPythonバージョンは3.6ですので、Python3.7をインストールするとなると大手術です。

過去のPandasのバージョンであれば、Python3.6で行けるのではないかと思い、過去のリリースノートをしらべました。

すると、0.25あたりであれば、良さそうな感じでしたので、pandasのバージョン0.25を指定してインストールしてみました。

root@pynq:~# pip3 install pandas==0.25
Collecting pandas==0.25
  Downloading https://files.pythonhosted.org/packages/0b/1f/8fca0e1b66a632b62cc1ae38e197befe48c5cee78f895edf4bf8d340454d/pandas-0.25.0.tar.gz (12.6MB)
    100% |????????????????????????????????| 12.6MB 10kB/s
Requirement already satisfied: numpy>=1.13.3 in /usr/lib/python3/dist-packages (from pandas==0.25)
Requirement already satisfied: python-dateutil>=2.6.1 in /usr/lib/python3/dist-packages (from pandas==0.25)
Requirement already satisfied: pytz>=2017.2 in /usr/lib/python3/dist-packages (from pandas==0.25)
Building wheels for collected packages: pandas
  Running setup.py bdist_wheel for pandas ... done
  Stored in directory: /root/.cache/pip/wheels/f2/b7/bb/14e0dd0f52f30829ded2c074e9240f9a5507a082caeb980af2
Successfully built pandas
Installing collected packages: pandas
Successfully installed pandas-0.25.0

すると、インストール成功。

無事、from pynq import Overlayも動作しました。

追記1:後になって思えば、Cythonのバージョンアップは必要なかったかもしれません。
追記2:このPYNQ2.3は自分でSDカードビルドしたものです。配布されているPYNQイメージはPandasがちゃんとインストールされていますので、そもそもこのような問題は生じないようです。