あのときのログ

思ったこと、経験したことを忘れないようにするためのメモ。

Macにpython3開発環境を構築する (pyenv導入)

手元のMacbook airにpython3環境を構築したいが、標準で入っている2.x系を変えてしまうのは他にどんな影響が起きるか分からないのでイヤ。 であれば、node.jsのnvmや、rubyのrbenvなどのように、複数バージョンをインストールして切替可能な方法でインストールしたい。

pythonにはそのようなツールとして、pyenvが提供されている。

最初、virtualenvがそういうものなのかと思ったが、virtualenvは文字通り仮想環境を用意するためのもので、 パッケージなどを含めた開発環境を別々に作るためのものなので、ちょっと違うらしい。

(どちらかと言えば両方を合わせて使いたい。)

virtualenvについては別途書くことにする。

とりあえず、まずはpyenvを導入してpython3をインストールする。

このあたりを見てやってみる。

理系じゃないけどMacにPython3導入した

ここで紹介している手順に従うと、以下のようになる。

1. Homebrewをインストール

2. pyenvをインストール

3. pyenvでPython3をインストール

1.Homebrewをインストール

入っていないわけはないので、スキップ・・・と言いたいところだが、この手順で行う前に $ brew install python3 とやって以下のエラーが発生していたことを思い出し、

Error: Homebrew doesn't know what compiler versions ship with your version
of Xcode (8.0). Please `brew update` and if that doesn't help, file
an issue with the output of `brew --config`:
  https://github.com/Homebrew/homebrew/issues

brew update をしてみろというので、やってみる。

※思えばこれが道を踏み外した瞬間。

$ brew update
==> Migrating Homebrew to v0.9.9
                         ・
                         ・
                         ・

うまく入ったっぽい。バージョン確認もしてみる。

$ brew config
HOMEBREW_VERSION: 1.0.7
(略)

2. pyenvインストール

$ brew install pyenv

無事に入ったように見えるので、pyenvコマンドを叩いてみる。

$ pyenv versions
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /usr/local/bin/bash
  Reason: image not found
Trace/BPT trap: 5

あれ?なんだこれ。

どうも、readline 6 が見つからないと言っているようだ。

※今入っているバージョン

$ brew info readline
readline: stable 7.0 (bottled) [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/readline.rb
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

そしてpyenvの問題かと思っていたのだが、実はもっと影響は大きく、bashですら起動時に同じメッセージで怒られる始末。

面倒なことになってきた・・・。

readlineの修復(readline6.3のインストール)

解決策を探して、似たケースっぽい以下を参考にした。

psqlしたらreadlineのエラーが出るようになって – はらいそ

コレに従って、readline6.3をダウンロード。( http://core.ring.gr.jp/pub/GNU/readline/ )

このダウンロードしたソースを解凍、configure、makeで インストールして brew switch readline 6.3 で切り替えしてみると、 ようやくbash でも pyenv でも起動時エラーが出なくなった。

.bash_profile に以下を追加。

#-- pyenv¬
export PATH="$HOME/.pyenv/shims:$PATH"

3.pyenvでPython3をインストール

ようやく動くようになったpyenvでpython3(この時点の最新:3.5.2)をインストールしてみる。

$ pyenv install 3.5.2
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
Installing Python-3.5.2...

BUILD FAILED (OS X 10.11.6 using python-build 20160602)

Inspect or clean up the working tree at /var/folders/xw/t3s4g06x3sx4nd1xkdck0r6r0000gn/T/python-build.20161012060445.36527
Results logged to /var/folders/xw/t3s4g06x3sx4nd1xkdck0r6r0000gn/T/python-build.20161012060445.36527.log

Last 10 log lines:

dyld: Symbol not found: _getentropy
  Referenced from: /private/var/folders/xw/t3s4g06x3sx4nd1xkdck0r6r0000gn/T/python-build.20161012060445.36527/Python-3.5.2/./Programs/_freeze_importlib
  Expected in: /usr/lib/libSystem.B.dylib

/bin/sh: line 1: 47690 Trace/BPT trap: 5       ./Programs/_freeze_importlib ./Lib/importlib/_bootstrap.py Python/importlib.h
make: *** [Python/importlib.h] Error 133
make: *** Waiting for unfinished jobs....
/bin/sh: line 1: 47691 Trace/BPT trap: 5       ./Programs/_freeze_importlib ./Lib/importlib/_bootstrap_external.py Python/importlib_external.h
make: *** [Python/importlib_external.h] Error 133

BUILD FAILDだと・・・

再び解決策を探して以下にたどり着く。

osx - Building Python 3 on OS X: [Python/importlib.h] Error 133 - Stack Overflow

最後のコメントに書いてある通り、 xcode-select --install をすればこのビルドエラーは解消するはず。

こちらにも書いてあった。 しかもGUIのダイアログまで載せてあって、同じ画面を見てとても安心。

coderoid.hatenablog.com

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

「残り約10秒」になってから10分以上待たされて、もう少しでキャンセルするところだったが、何とか完了。

再度 python3.5.2のインストールを試みる。

$ pyenv install 3.5.2
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
Installing Python-3.5.2...
Installed Python-3.5.2 to /Users/username/.pyenv/versions/3.5.2

成功!長かった。。

インストールされたことを確認。

$ pyenv versions
* system (set by /Users/username/.pyenv/version)
  3.5.2

最後に標準で使うバージョンをsystem → 3.5.2に切り替え。

$ pyenv global 3.5.2
$ pyenv rehash

$ pyenv versions
  system
* 3.5.2 (set by /Users/username/.pyenv/version)

これでようやく、pyenvで切替可能な状態で、python3を使えるようになった。

Excel関数で重複を除いた件数を数える

Excelに集計された3階層構造くらいのデータを、2階層目くらいのIDで count distinct 的なことができないかなぁ・・・と思っていたら、やっぱりあるんですね。関数として用意されていなくても計算する方法が。

=SUMPRODUCT(1/COUNTIF(範囲,範囲))

なんでこれで出来るの?とパッと見では全然わからなかったのですが、こちらのサイトの説明ですっきり分かりました。

software.ssri.co.jp

めっちゃ便利!多分同じような場面で何度も使うと思います。 忘れないように、いや忘れるのでメモとして残しておきます。

CentOS6.5でlocaleを追加する

VagrantでCentOS6.5を使っているが、python環境を構築中、pipでdateutilをインストールしようとしてlocale.Error: unsupported locale settingが発生。普通にja_JP.utf8を使っていて特殊なものは使っていないつもりだったのだが、なぜロケールエラーが。。。

解決法を探していたらこの記事を見つけた。

blog.tokoyax.com

まるっとこのまま参考にさせて頂きました。

※まだdateutilパッケージはインストールできていません。。

Elasticsearchの過去データパージ

主にログ可視化環境で使うことが多いElasticsearchだが、取り込むログの量が多いとあっという間にDISK容量を圧迫してしまう。

Elasticsearchの古いデータの削除はcuratorを使って行える。

以下を参考にインストールし使ってみる。

利用にはpython & pip が必要。

qiita.com

●1ヶ月経った httpd_log のindexを削除

$ curator --host localhost delete indices --older-than 30 --time-unit days --timestring %Y-%m-%d --prefix httpd

●2週間経った nginx_* のindexを削除(COneのnginxログは1日の出力量が数GBに達するため、どのindexも2週間

$ curator --host localhost delete indices --older-than 14 --time-unit days --timestring %Y-%m-%d --prefix nginx

上記をcronに1日1回入れておけばOK。

git commit でコメント間違えたら

Gitあるあるだと思いますが、コマンドラインで git comit -m "..." で日本語入れるつもりで書いて変換のつもりでEnterしたら、あれっ!

うわ、私のコメントダサい。。

そんな時には・・・えーっと、どうするんだっけ。。

そんなgitで困ったときに使いたい、意外と頻繁に使うgitコマンドtipsがまとまっている良いトピック。

リンク貼っとくだけだが、ブックマーク代わりにする。

qiita.com