rcmdnk's blog
Last update

初めてのPython 第3版

Mavericksでは/usr/bin/pythonが2.7.5のバージョンがインストールされていて、 現時点ではpython3は特に必要ないので、 Homebrewのは消してMacに入ってる物を使う様に。

Homebrew環境のリセット

取り敢えずHomebrewも色々ごちゃごちゃしてしまってるので一旦リセット1

brewallを使って現状のリストを確認。

$ cd
$ brewall -i
$ cp /usr/local/Library/Brewfile .
$ brewall -e

として、リストをホームに一度退避てから、最後の所で ファイルを開いて中身を全部消す。

$ brewall -c -r
$ rm -rf /Library/Caches/Homebrew

で全部削除。

改めてBrewfileを吟味してbrewall -eで編集して現状以下の様に。

Brewfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Tap repositories and their packages
tap 'rcmdnk/brewall'
brew 'brewall'


# Cask packages

# Other Homebrew packages
brew 'lua'
brew 'macvim --with-lua'
brew 'mercurial'
brew 'stow'
brew 'tig'
brew 'w3m'

出来たら

$ brew update
$ brewall

で全部インストール。 これでHomebrewのpythonは消えて/usr/bin/pythonがデフォルトに。 /Library/Python/等もMacデフォルトを使うようになる。

pipをインストール

pipは入ってないのでeasy_installで導入 2

$ sudo easy_install pip

Homebrewで入れなおす時の注意

これでMacのデフォルトpythonを使うようになったわけですが、1つ注意しておかなくては いけないのが 次にHomebrewでpythonを入れようとするとき。

現状、python2.7.5がHomebrewの2系の最新なので必要ないですが、 もし、次にHomebrewでpythonを入れることがあると、上でeasy_installしたpipが問題になります。

/Library/Python/2.7/site-packages/に書き込むために sudoで入れてるのですが、 pip本体は/usr/local/binに入ります。

これが、Homebrewで入れる時にconflictするので、 brew install pythonの途中で

...
They will install into the site-package directory
  /usr/local/lib/python2.7/site-packages

See: https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python
Warning: Could not link python. Unlinking...
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link python'

Possible conflicting files are:
/usr/local/bin/pip-2.7
/usr/local/bin/pip

みたいなWarningが出ます。/usr/local/bin/pip*はrootの物になっているので Userでは書き換えられないため。

pipが問題なんですが、 pipの後にpythonのリンクを作るようになってるみたいで、 python自体も/usr/local/bin/にリンクされません。

これを回避するために、簡単には

$ sudo chown $USER /usr/local/bin/pip*

をしておけば良いと思います。

追記: 2013/11/20

これをしておいても、上の方法だと実体をインストールしてあって、 Homebrewでリンクを張るときに実体があるとエラーになります。

brew install pythonした後に(この時はリンクが貼れない、とエラーが出る)、

$ brew link --overwrite python

とすると、必要なファイルを消してリンクを作りなおしてくれます。 ただ、この時も、rootのものになってると消せないので 先にrootで消しておくか、上の様にユーザー権限に変えておく必要が有ります。

追記ここまで

pythonをdownload/compileするのは結構時間がかかるので、 全部終わった後にリンクをつくろうとして上みたいにエラーするとがっかりするので、 とりあえずでもしておくべきです。。。

gcalcli周りのセットアップ

GeekToolでgcalcliというpythonスクリプトを使ってGoogleカレンダーの内容を表示 させたりしてるのですが、これに必要なライブラリー等のセットアップ。

最近setup.pyが加えられたので簡単にインストールが可能。

$ git clone [email protected]:insanum/gcalcli.git
$ cd gcalcli
$ sudo pip install .

pip install後の.を忘れないように。 これで、gcalcli自体も/usr/local/bin/以下にインストールされ、 gflags等のmoduleも/Library/Python/2.7以下にインストールされます。

ちなみに、gcalcliでgoogleへのリクエスト回数が1日の上限を越してしまって エラーが出る3 ということが問題になっているみたいです。 たまに見えなくなってておかしいな、とは思ってたんですが、 実際さっき見えなくなってたので(GeekTool上ではエラーが出たら何も出力しないようにしてるので)、ターミナルから試してみたら確かに

  File "/Library/Python/2.7/site-packages/apiclient/http.py", line 723, in execute
    raise HttpError(resp, content, uri=self.uri)
apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?timeMax=2014-01-05T00%3A00%3A00%2B01%3A00&alt=json&singleEvents=true&timeMin=2013-11-05T00%3A00%3A00%2B01%3A00 returned "Daily Limit Exceeded">

こんな感じのエラー。 回避するには、自分でGoogle Apiのclient IDとclient secretを Google Cloud Console から作成して取ってきます。

$ rm -f ~/.gcalcli_cache ~/.gcalcli_oauth
$ gcalcli --client_id xxxx.apps.googleusercontent.com  --client_secret xxxx agenda

こんな感じで一度設定やキャッシュを消して自分のclient ID/secretを入れて 認証しなおしてあげます。 これで、googleへのリクエストが自分専用になるので、 普通に使う限り上限4は超えません。

さらにちなみに、このgoogle apiを使うときに認証に使うsecretについて、 gcalcliなんかだとデフォルトの物がスクリプトに平文で書いてあるんですが、 secretなのに公開して良いのかどうか。

単にsecretは公開しちゃ駄目、みたいに書いてある所があったり、 gcalcliみたいに普通に見えるものもあったり。 上で挙げてるgcalcliで上限超えちゃったというissueでは googleの中の人と名乗る人がこのscript見た上で 上限を変更したりしている(?)ので、この書き方自体に大きな問題が あるわけでも無いような。

深く言及してるところとしては

OAuth2.0のclient_secretって本当に秘密鍵ですか?

Re: OAuth 2.0のclient_secretって本当に秘密鍵ですか?

この辺り。要するに、googleの場合はちゃんと何が公開されて 何にアクセスされて、何がいじられる可能性があるか、きちんと 理解してれば公開しても問題ないよ、ということのよう。

一方Facebookでも同じような定義があるが、こちらのsecretは 漏れると危険なので公開しちゃ駄目、とのこと。

もうひとつついでに、GeekTool なんですが、一度version 3.0の時にApp Storeからの配布に変更されてたんですが、 また、直接配布型に変わってました。

どうもAppleがアプリの制限を強化したらそれにひっかかってやっぱり直接配るわ、 となったみたいです。

現状のGeekToolと交換する祭は、 公式から最新版を取ってきて、 GeekToolを起動作しているなら開いてEnableからチェックを外し、 一応アクティビティモニタでGeekTool Helperが動いてないのを確認して /Applications/のGeekTool.appを最新版で上書き。

GeekToolを開いてEnableにチェックすれば前の設定のママ動くはずです。

python 2.7.6

と、python 2.7.5で満足しようとしてたんですが、 ふとpython公式ページを見てみたら

Users of Mac OS X 10.9 should download Python 2.7.6 as it fixes a bug that causes the interactive prompt to crash.

Python Programming Language – Official Website Python 2.7.5

とのこと。 特にMavericksでのreadline周りの変更が問題?のようで、 インタラクティブにやるときにクラッシュすることがあるとかないとか。

Stack Overflow にも色々問題が出た、という報告が上がってますが、 出てる通りにやってみてもクラッシュしたりしなかったり、いまいち良くわかりません。

が、いずれにしろ、問題があるのは確かな様。

Python 2.7.6 は10月26日に出されたばかりで、まだrelease candidate 1なので、 このRC1を入れても更に問題が起こった、との報告も出てるみたいです。

差し当たり、 Homebrewはまだ2.7.5のままで、 入れるには上記公式から直接取ってきて 入れる必要がありますが、 特に困ったことも手元ではないので見送る予定。

追記: 2013/11/20

11/10付けで正式版がリリースされたようです。 Homebrewのバージョンも2.7.6になっています。 現状、特に不満は無いわけですが、一応Homebrewで新しいのをインストールしておきました。

上にも書いたようにpipのリンクが出来なくて弾かれるので 一度installを行った後に強制的にlinkを張るように

$ brew intall python
$ brew link --overwrite python

追記ここまで

Sponsored Links
  1. MavericksでHomebrewが問題ある、との話もチラホラありますが、 大概の場合、Xcodeのコマンドラインツールがちゃんとインストールされてないだけで、 Ruby環境をrvmからデフォルトに戻す でも書いたように

    xcode-select --install
    

    として(Xcodeの最新版を入れてかつ)コマンドラインツールを入れてやれば治るはず。 Mavericksにしたらまずこのコマンドは必須です。

  2. HomebrewでPythonを入れると同時にpipも入れる様になっています。

  3. BOOM!!! Daily limit reached…

  4. カレンダーだと100,000 requests/day or 5.0 request/secon/user

Sponsored Links

« Ruby環境をrvmからデフォルトに戻す 最新のCygwinでVimをインストールすると起こるエラー »

}