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

けつあご日記

こんちは.菊地です.なんか浅ーいことをいろいろ書きます

ウチのPATHはpyenvに乗っ取られているらしい【なれない日記20160705】

なれない日記 Python


昨日はムダRI講習で一日潰れたり他の記事書いてたりしてたせいで,日記をサボってしまった.
www.ketsuago.com

さて,今日でやっとPython環境が一段落した.いろいろ勘違いしてたせいで時間食ってしまった.

pipで入れたtensorflowはソースと結構違うぞい(当たり前)

何を勘違いしてたかというと,K君(理学部のイケメンの彼)からチュートリアルコードをもらっていたので,インストールが上手く行けばそれが動くようになると思っていた.がそのコードはソース(github)から取ってきたコードだったので,入っているモジュールが結構違い,インストールが上手く行っても動かないコードだった.

無能らしく間抜けこいた...どうりで存在しないモジュールをimportしてるわけだ.ソースからgitでtensorflowをインストールする方法も公式には書いてあり,これでやれば動くようになるんだろうが,とりあえずやめた.K君がMNISTのわかりやすいコードを書いてくれたので,そっちでしばらく遊んでみる.

そんな勘違いのせいで環境をいじり直したりした.といっても仮想環境内にtensorflowを入れなおしただけ.
www.ketsuago.com
↑一昨日は普通にpipで入れたが,condaで作った仮想環境内に入れなおした.

condaの仮想環境にtensorflowを入れる

基本的に公式のinstallation guideと↓を参考に.
datalove.hatenadiary.jp

一昨日pipで入れたものは消しといた.

% pip uninstall tensorflow

んでcondaで仮想環境を作成.

% conda create -n tfenv python=3.5

起動.

% source activate tfenv
Error: activate must be sourced. Run 'source activate envname'
instead of 'activate envname'.

Usage: source activate ENV

Adds the 'bin' directory of the environment ENV to the front of PATH.
ENV may either refer to just the name of the environment, or the full
prefix path.

...ターミナルが止まってしまう.仮想環境のbinをPATHの頭に持って来い的なことを言っているが,PATHをどういじっても

/Users/HKikuchi/.pyenv/shims

が頭に来るぞ??どうやらpyenvを入れるとshimsスクリプトなるものでPATHが乗っ取られるらしい.まじかよ.

pyenv は shims スクリプトで $PATH を乗っ取るので、 source activate foo みたいなことやっても期待通りのスクリプトを source することはできません

http://qiita.com/yyuu@github/items/7de957838437eaecdc8a

↓ではPATHにanacondaへのパスを書き込んでpyenvを使わない,ってのができるって書いてあるけど,できない...
qiita.com

しかたがないので,activateをフルパスで書く.

% source /Users/HKikuchi/.pyenv/versions/anaconda3-4.0.0/bin/activate tfenv

動いた.↑のサイトがやっているようにaliasを作っておく..zshrcに

alias activate='source /Users/HKikuchi/.pyenv/versions/anaconda3-4.0.0/bin/activate'

を追加.本当は,

alias 'source activate'='source /Users/HKikuchi/.pyenv/versions/anaconda3-4.0.0/bin/activate'

にしたかったんだけど,やってみるとちゃんと動かなかった.aliasで作るコマンドに空白を入れてはいけないってことなんだと思う.「一つのコマンド」じゃないといけないみたいな.これが無茶振りなのは私にもなんとなく分かる.このaliasだと起動は"activate"で,終了は"source deactivate"で行わないといけないので,ちょっとややこしい.忘れてしまいそうだ...(と思ったらうまいこと解決した.ちょっと脱線してしまうので次のセクションに書いた↓)

仮想環境が起動したら,その中でpip.この前は普通のpipで入れていたが,公式によると3系を使うならpip3だそうだ.そりゃそうか.

(tfenv) % pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.9.0-py3-none-any.whl

source activateの解決策

alias云々のところでいろいろ調べてたら,sudoでaliasを有効にする方法,という学びを得た.どうやらsudoのあとに空白を入れるらしい.と言っても

% sudo  ll
#空白が2個入っている

とかすればよいわけでなく,sudo自体にaliasを登録しておく.

% alias sudo='sudo '

こうするとsudoでaliasが使用できるようになる.バッドノウハウ感するな,と思ったがどうやら仕様らしい.

最初のコマンドが引用符で囲まれていない場合に alias を確認する。alias の値がスペースかタブで終わっていればその次のコマンドも確認する、と。

なんか裏技的な手法だと思っていましたが、普通に仕様みたいです。

http://archive.blog.hekt.org/archives/5085/

へー.........ん?ということはもしかして...

% alias source='source '
% alias activate=/Users/HKikuchi/.pyenv/versions/anaconda3-4.0.0/bin/activate
# さっき設定したaliasは一旦消してます

% source activate tfenv
(tfenv) %

動いた.気分が良い.

Couseraの機械学習コースでも受けようかな

私はそもそも機械学習を勉強したことがない.そんな状態でtensorflowやるで,とか端から見ればアホ丸出しに違いない.一度ひと通りの講義でも受けたいな,と思ってたところ,Couseraというオンライン講座の機械学習コースがとても良いという話を聞いた(見た).どうやら2ヶ月ちょいの動画+テストのコースらしい.

日本語字幕もついてるし,やってみようかしら.Octaveを使うのでやばいと思ったが,ちゃんとそこら辺もサポートしてくれるってさ.これ修了したらPRML読むことを許される?買う権利くれる?

Extended Attributesについての学びを得た

Macのターミナルでls -lするとパーミッションの後にアットマーク@がつくことがある.なんだよツイッター垢かよ.調べたらMac固有のExtended Attributesというファイルの付加情報だそうだ.Spotlight検索などに使われるらしい.ほっておこう.

www.shigemk2.com



↓アフィカスリンク

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版