LinuxマシンのSSDが死んだため、以前入れていたspleeterをインストールしなおしました。
今回はcondaを使わずインストールしましたが、いくつかハマったのでメモしておきます。
目次
インストール
前回はよく分からないままcondaを使ってしまいましたが、今回はcondaを使いません。 spleeterの文書でもcondaを使うインストールを今は推奨はしていないと書かれていますね。
何も問題がなければ、インストールそのものは簡単にできます:sudo apt-get install ffmpeg libsndfile pip3 install spleeter
python 3.6 から 3.8でのみ動く
spleeterはtensorflow 2を使っている都合上、tensorflow 2が対応しているpythonのバージョンに合わせる必要があります。
システムのpythonが3.9だったので、pyenvで3.8系をインストールしました。
libffi-devが入っていないままpythonをbuildした
ライブラリが足りないままpyenvでpythonをbuildすると、いくつかのpythonパッケージのインストールを失敗します。
No module named ‘_ctypes’はあるあるらしいので楽です。これはlibffi-devが足りない場合とのこと。
Collecting librosa==0.8.0 Using cached librosa-0.8.0.tar.gz (183 kB) ERROR: Command errored out with exit status 1: command: /usr/local/share/pyenv/versions/3.7.11/bin/python3.7 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-bkk_rj_j/librosa_0f3f722998da450883b6b6a7b4bafb22/setup.py'"'"'; __file__='"'"'/tmp/pip-install-bkk_rj_j/librosa_0f3f722998da450883b6b6a7b4bafb22/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ho46vo6j cwd: /tmp/pip-install-bkk_rj_j/librosa_0f3f722998da450883b6b6a7b4bafb22/ Complete output (11 lines): Traceback (most recent call last): File "", line 1, in File "/usr/local/share/pyenv/versions/3.7.11/lib/python3.7/site-packages/setuptools/__init__.py", line 19, in from setuptools.dist import Distribution File "/usr/local/share/pyenv/versions/3.7.11/lib/python3.7/site-packages/setuptools/dist.py", line 34, in from setuptools import windows_support File "/usr/local/share/pyenv/versions/3.7.11/lib/python3.7/site-packages/setuptools/windows_support.py", line 2, in import ctypes File "/usr/local/share/pyenv/versions/3.7.11/lib/python3.7/ctypes/__init__.py", line 7, in from _ctypes import Union, Structure, Array ModuleNotFoundError: No module named '_ctypes'
ということで、libffi-devをインストールしてpythonをインストールしなおします。
pyenv uninstall 3.8.11 sudo apt-get install libffi-dev pyenv install 3.8.11 pyenv local 3.8.11 python3.8 -m pip install --upgrade pip pip3 install spleeter
python3.8 -m pip install --upgrade pip
はpip3を使うたびに「新しいpipがあるからupgradeしろ」と言われるので入れています。
liblzma-devが入ってないままpythonをbuildした
これもライブラリが足りないままpythonをbuildしたために起こるエラーです。
上と違うのはspleeterのインストールは成功したのに、実際にspleeterを使う段でエラーになる点です。
spleeter separate -p spleeter:5stems -o output fuga.mp3 /usr/local/share/pyenv/versions/3.8.11/lib/python3.8/site-packages/pandas/compat/__init__.py:120: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError. warnings.warn(msg)
これはlibzma-devが足りない例です。
対処は上記の場合と同様に足りないライブラリをシステムにインストールしてからpythonをbuildしなおしです:
pyenv uninstall 3.8.11 sudo apt-get install liblzma-dev pyenv install 3.8.11 pyenv local 3.8.11 python3.8 -m pip install --upgrade pip pip3 install spleeter