訳あって自分でZYBO-Z7-20向けにSDカードビルドしたPYNQ2.3にPandasをインストールしようとしたところバージョン不整合でうまくいかなかった(2020年12月現在)ので、バージョンを指定してインストールすることで問題解決をしましたので、情報共有します。
問題解決の経緯も書いておきますので、ご参考まで。
PYNQ2.3は2018年9月にリリースしたようです。
ビットストリームを書き込むために、Overlayをimportしようとすると、以下のようにModuleNotFoundError: No module named 'pandas'
といわれて、実行できません。
#! /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がちゃんとインストールされていますので、そもそもこのような問題は生じないようです。