pip install scipyしてコケる時
mountain lionでpip install scipy
したのにranlib: archive member: build/temp.macosx-10.8-x86_64-2.7/libarpack_scipy.a(znaup2.o) cputype (7) does not match previous archive members cputype (16777223) (all members must match)
と表示されてscipyのインストールが成功しないときは
$ export CC=clang; export CXX=clang; export FFLAGS=-ff2c
$ pip install scipy
で無事インストールされる(公式にちゃんと載ってる)。
7/6追記
この情報は最早古く上記リンク先にはexportの記述は見当たらなくなっている。
brew install gfortran
でgfortranを入れた上でpip install scipy
を実行したら普通にインストールされた。
なお手元の環境ではbrew link
しろと言われたのでbrew link --overwrite gfortran
でシンボリックリンクを作成した上でpipを実行した。
homebrewでphp5.4.12をインストール
brew tap
でリポジトリを追加したらインストールできるはずだがconfigure: error: GD build test failed. Please check the config.log for details.
と表示されてコケて調べたのでそのメモ。
このissueを参考にして、freetype, jpeg, libpng, gdを入れなおしたら行けた。
$ brew update
$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php
$ brew rm freetype jpeg libpng gd
$ brew install freetype jpeg libpng gd
$ brew link --overwrite freetype
$ brew install php54
なおbrew link --overwrite freetype
はWarning: Could not link freetype. Unlinking...
というエラーがfreetypeのインストール時に表示されたため実行した。
osxとdebian上でrbenv + ruby-buildを使ってruby 2.0.0-p0をインストール
今更な上に色んな人が書いていますが自分もやってみました。
rbenv, ruby-build
rbenvはrvmのような複数バージョンのRubyを管理するためのツールで、 ruby-buildはrbenv installを提供するrbenvのプラグインです。 環境変数でバージョンの切替などができる模様です。
参考: rbenvとRVMとの違い
インストール環境
- mac osx(Mountain Lion 10.8.3, x86_64)
- さくらVPS上のdebian(squeeze 6.0.7, x86_64)
- homebrew/apt-get, gitはインストール済み
mac osx上でのインストール
この記事を参考にさせて頂きました。 ここではhomebrewを使ってrbenv, ruby-buildのインストールを行います。 ちなみにruby 2.0.0-p0を使いたいだけならばhomebrewで直接導入もできるみたいです。
0. 準備
予めreadline、opensslをインストールしておきます。
$ brew update
$ brew install readline
$ brew install openssl
1. rbenv, ruby-buildのインストール
以下のようにしてインストールします。
$ brew install rbenv
$ brew install --HEAD ruby-build
2013/10/27追記
ruby-buildでインストール可能なrubyのバージョン一覧を更新したいときは、gitで入れた場合はpullするだけですが、homebrewで入れている場合は一旦brew uninstall --HEAD ruby-build
した後に再びinstallしてやれば最新のruby-buildがインストールされるのでこれで一覧が更新されます。
2. ruby 2.0.0-p0をインストール
以下を実行して
$ rbenv install -l
一覧にruby 2.0.0-p0
があることを確認した後に、
$ RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0
でインストールします。インストール後、以下を実行します。
$ rbenv rehash
$ rbenv global 2.0.0-p0
rbenv rehash
は~/.rbenv/shims
を更新することで、インストールしたrubyやgemの情報を更新するコマンドです。
~/.rbenv/shims
はirb, gem, rake, rails, ruby
といったrubyに関するコマンドを維持するためのディレクトリで、
このディレクトリをパスの先頭に追加してやる必要があります。
公式にはこのためにrbenvは予め以下を実行することで、パスの追加及び自動補完を有効化し、
ついでに.zshenv
(bashの場合は.bash_profile
)にeval $(rbenv init -)
を書き込んでくれる旨が書かれています。
$ echo 'eval "$(rbenv init -)"' >> ~/.zshenv
rbenv init -
のみを実行すると何が行われているかが分かると思います。
一方でrbenv global
は~/.rbenv/version
を更新するためのコマンドです。
このファイルが存在しない場合、rbenvはシステムにインストールされたrubyを使用することを想定するようです。
またrbenv local
でアプリケーション毎に利用するrubyのバージョンを切り替えられたりするようです。
この上で、以下を実行してバージョンを確認します。
$ ruby -v
これでruby 2.0.0p0
が表示されれば無事インストール完了です。
2013/10/27 追記
osxをmavericksにアップデートしたらrbenv install
実行時に以下のようなエラーが出るようになりました。
BUILD FAILED
Inspect or clean up the working tree at /var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118
Results logged to /var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118.log
Last 10 log lines:
checking build system type... x86_64-apple-darwin13.0.0
checking host system type... x86_64-apple-darwin13.0.0
checking target system type... x86_64-apple-darwin13.0.0
checking for gcc-4.2... gcc-4.2
checking for gcc... (cached) gcc-4.2
checking whether the C compiler works... no
configure: error: in `/var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118/ruby-2.0.0-p195':
configure: error: C compiler cannot create executables
See `config.log' for more details
make: *** No targets specified and no makefile found. Stop.
コンパイラが問題だということが分かるので、
$ CC="/usr/bin/clang" RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0
とコンパイラを明示的に指定してインストールすることで解決します。
debian上でのインストール
この記事を参考にさせて頂きました (Qiita上で僕も記事を書くべきのような気もして来ましたが…)。 debianではapt-getを使って必要なパッケージ一式を取得した後に、 rbenv, ruby-buildをgithub上のリポジトリをcloneして取得します。
0. 準備
予めビルドに必要なパッケージ一式をインストールします。
$ sudo apt-get update
$ sudo apt-get install build-essential bison openssl libreadline6 \
libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev \
libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf \
libc6-dev ncurses-dev
1. rbenv, ruby-buildのインストール
公式を参考に以下のようにしてgitで取得し、各種設定を行います。
rbenvのインストールは以下のように行います。~/.rbenv/binにパスを通しているのは、
rbenv init`の実行のためです。
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l # restart login shell
この上でruby-buildをインストールします。
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
2. ruby 2.0.0-p0をインストール
以下を実行して
$ rbenv install -l
一覧にruby 2.0.0-p0
があることを確認した後に、
$ rbenv install 2.0.0-p0
でインストールします。インストール後、以下を実行します。
$ rbenv rehash
$ rbenv global 2.0.0-p0
もう完全にはてなブログに移行します
markdownで記事が書けるのではてなブログの方を最早メインで使います。以上。
http://wrist.hatenablog.com/
2013年 手首の目標
緒言
そろそろ一年の1/12が終わろうとしているというのに今更2013年の目標を立てようかと思います。 昨年は修論に始まり就職、研修、配属と立て続けに色々あったので、多少は落ち着いた今年こそ適当に頑張りたい。
目標達
- 頑張ってブログを書く
- ロードバイクでn*100km以上の遠出をする
- 10kg痩せる
- 裁断機とスキャナを買ってできれば自炊する
- 一ヶ月に一回ぐらいは地域の勉強会に参加
- githubをちゃんと使う
- 個人のポートフォリオを作る
- アップルにお布施を払ってしまったのでiPhoneアプリを一本仕上げてリリースしたい
- HTML5のaudio周り(web audio apiなど)をちゃんと追う
- Scalaで一本Webサービスを仕上げる
- 放置しているSICPをスケジュールをちゃんと立てて読む
- PRMLもちゃんと読みたい
- 本業のための勉強を最優先にする
無理かもしれないけど諦めるものか
xargsにbashのfunctionを渡す方法
あっさりできるかと思ったら意外に時間が掛かってしまったので纏めておく。
ポイントは2点で、
- export -f 関数名 しておく
- xargsではbash -c "コマンド" を実行する
で行けた。
例
パスにそのbasenameした結果をTAB区切りで連結しただけの文字列をechoする関数を定義する。
$ function echo_with_basename(){ > echo -e "$1\t`basename $1`" # -eオプションが無いと\tがTABに変換されない > }
この関数を次のようにファイルリストを出力した結果をパイプで繋ぎxargsに渡す。
$ cat filelist.txt /home/wrist/data/A00000.txt /home/wrist/data/A00001.txt /home/wrist/data/A00002.txt /home/wrist/data/A00003.txt /home/wrist/data/A00004.txt $ cat filelist.txt | xargs -I % echo_with_basename % # "-I %"のオプションは引数を%で表すことを示す xargs: echo_with_basename: そのようなファイルやディレクトリはありません
このようにそのようなファイルやディレクトリが無いと言われてしまう。
そこでexport -fした上で次のように実行する。
$ export -f echo_with_basename $ cat filelist.txt | xargs -I % echo_with_basename % xargs: echo_with_basename: そのようなファイルやディレクトリはありません
またしても同じ事を言われてしまう。これを防ぐためには、次のように実行する。
$ cat filelist.txt | xargs -I % bash -c "echo_with_basename %" /home/wrist/data/A00000.txt A00000.txt /home/wrist/data/A00001.txt A00001.txt /home/wrist/data/A00002.txt A00002.txt /home/wrist/data/A00003.txt A00003.txt /home/wrist/data/A00004.txt A00004.txt
これで所望の結果が得られた。
なおインタラクティブシェルだけでなくスクリプトとして実行する際もexport -fした上で同様に利用することができる。
参考
http://stackoverflow.com/questions/3321738/shell-scripting-using-xargs-to-execute-parallel-instances-of-a-shell-function
http://www.webzoit.net/hp/it/internet/homepage/env/cs/server/os/type/unix/linux/shell/kind/sh_bash/function2/
http://stackoverflow.com/questions/979453/how-can-i-use-aliased-commands-with-xargs