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)
このうちaddgrads
でSource gradient is not set.
というエラーが発生した。発生箇所はこのあたりだが、原因がよくわからなかった。
ソースコードを読んでいて原因がわかった。どうやらChain
インスタンスでadd_link
したlink
のうち、未使用のものがあるとこのエラーが発生するらしい。解決策としては
- 未使用のlinkを消す
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
等々するより、自分でコンパイルしてインストールした方が手っ取り早い。
手順としては、
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