読者です 読者をやめる 読者になる 読者になる

開発のヒホ

iOSとかAndroidとかのアプリを開発するのに四苦八苦するブログ

macOS SierraでPython3のインタラクティブモードの矢印キーがおかしいのを直す

 macOS Sierraにしてから、Python3のインタラクティブインタプリタ)モードで方向キーを押すと [[A とか [[C とかが表示され、カーソルの移動ができなくなった。ついでにCtrl+Cなどのショートカットキーも使えない。困った。

 色々調べているうちに、どうやら readline というライブラリをうまく読み込めていないことがわかった。 readline をHomebrewを使ってアンインストールしたりインストールしたり、pipを使って同じことをすれば直る場合もあるらしいが、僕の場合はうまくいかなかった。困った。

 色々試しているうちに、そもそも import readline でエラーが発生していることがわかった。エラー内容を確認すると、どうやら /usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload/readline~~~ が解決ができていないようだ。こいつを消してreadlineを再インストールすると上手く行った。

 解決策を探すと雑多で適当な情報があふれていたが、その1つとして書き残しておく。

chainerでcleargrads後のaddgradsでSource gradient is not set.エラー

 chainerでは、複数のGPUを使って並列にlossを求めて逆伝搬し、勾配を足し合わせてからupdateする方法がサポートされている。
 Using GPU(s) in Chainer — Chainer 1.15.0.1 documentation

 コードは以下のようになる。

model_0.cleargrads()
model_1.cleargrads()

loss_0 = model_0(x0, t0)
loss_1 = model_1(x1, t1)

loss_0.backward()
loss_1.backward()

model_0.addgrads(model_1)
optimizer.update()

model_1.copyparams(model_0)

 このうちaddgradsSource gradient is not set.というエラーが発生した。発生箇所はこのあたりだが、原因がよくわからなかった。

 ソースコードを読んでいて原因がわかった。どうやらChainインスタンスadd_linkしたlinkのうち、未使用のものがあるとこのエラーが発生するらしい。解決策としては

  1. 未使用のlinkを消す
  2. cleargradsではなくzerogradsを使う

 といった感じだろう。

 エラーの原因が分かるようassertを出すPRを作ろうと思ったが、Chain内に書くしか無く、そうするとChain内で全paramを網羅的に調べる必要があるので、コードが汚くなるし処理が重複してしまう。うーん、errorをthrowする設計がたまに恋しくなるなぁ。

pyenvもvirtualenvも無いMacでPython3からOpenCVをimportする環境の構築方法

 pyenvやvirtualenvを用いたOpenCVのインストール方法や、Homebrewを用いたOpenCVインストール方法は多々あります。が、brew install python3でインストールしたPython3からOpenCVを用いるのは、MacにプリインストールされているPythonに邪魔されて難しい。brew install opencv等々するより、自分でコンパイルしてインストールした方が手っ取り早い。

手順としては、

  1. OpenCVソースコードをダウンロード
  2. configure
  3. make
  4. インストール

OpenCVのダウンロード

 DOWNLOADS | OpenCV
 version3以上をダウンロードする。

configure

mkdir build
cd build
cmake ..
ccmake .

 こんな感じで設定した。

  • PYTHON3_EXECUTABLE : /usr/local/bin/python3
  • PYTHON3_INCLUDE_DIR : /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/include/python3.5m
  • PYTHON3_LIBRARY : /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/libpython3.5m.dylib
  • PYTHON3_PACKAGES_PATH : /usr/local/lib/python3.5/site-packages
  • PYTHON3_NUMPY_INCLUDE_DIRS : /usr/local/lib/python3.5/site-packages/numpy

(includeディレクトリ等は、/usr/local/bin/python3の「オリジナルを表示」から推測)

cを押してconfigureを実行してからqで終わる

make

make && make install

確認

import cv2
# エラーが出なければOK

参考にしたWebページ

Mac に Python 3.4 + OpenCV 3.0 の環境をつくる - Librabuch