2018年1月11日木曜日

Docker上のUbuntuでsndfileにハマっていた話

dockerでjupyterを使う


最近はjupyter notebookをよく使っているので, モジュール(ここではlibrosaなどのこと)をホストマシンに直入れしています.

誰しも, いろいろプログラムを触っているうちに, 有用なレガシーコードを動かしたくなることがあると思います.
しかし, importしているモジュールのバージョンが古い, ということがあります.
僕は, それを解決するために, dockerコンテナ上でjupyter notebookを動かしています.

dockerコンテナ毎でモジュールを管理していけば楽じゃないかと.
(結局, モジュール数が増えると管理が大変なんだけど. 誰か上手な方法を教えて欲しいです.)

構築は大変楽で, anaconda3入りのコンテナをpullして, ターミナルで,

docker run -dit -p 8888:8888 --name jupyter-notebook -v $HOME/jupyter-notebook/notebooks:/opt/notebooks continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --no-browser --allow-root"

するだけです. あとは,

docker logs jupyter-notebook

で出てくるURLをブラウザにコピペするだけです.


ところが


jupyterでimportした, 音声系のプログラムを動かすためのsoundfileがこう吐き出すのです.

OSError: ctypes.util.find_library() did not manage to locate a library called 'sndfile'.

ctypes.util.find_library()がsndfileを管理していない??
ググっても情報が少なくて小一時間はまりました.

結論


apt-get install libsndfile1

で直る.

libsndfileはUbuntuの音声読み書き用のライブラリで, soundfileが読み書きに使っています. 
僕は, /usr/lib内にlibsndfileがないため, OSErrorになったのだろうと考えています.

わりとチンケなエラーだったな_(┐「ε:)_

0 件のコメント:

コメントを投稿