PythonbrewというPythonに複数のPython実行環境をインストール・管理できるツールがあるのだけれども
ArchLinuxでうまく入らない。
こちらのgithubで公開されている
githubにインストール方法があって、
curl -kL http://xrl.us/pythonbrewinstall | bash
とコマンドを打った後、.bashrcファイルに
[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc
という文字列を最終行に書いて、bashを起動し直すだけでOKという簡単ソフト
なんだけれども...ArchLinuxではうまく行かない。
AURのコメントにも悲痛の声が
AURにも悲痛のコメントがあって、全く同じ状況だった。
https://aur.archlinux.org/packages/pythonbrew/?setlang=ja
僕も同じく以下のようなエラーメッセージがでる。
言語設定に寄っては一部日本語表記になるけれど、ほぼ同じメッセージになる。
これはシンタックスエラーということで文法が間違っているということだろう。
awk: cmd. line:1: //home/hogehoge/.pythonbrew/ {next} {print}
awk: cmd. line:1: ^ syntax error
AWKのバージョンなのか?
エラーメッセージからわかるけれども、awkが関係しているようだ。
とりあえずUbuntu12.04とDebian7の環境も持っているので、それで試してみた。
結果は以下の通り。
- ArchLinux gawk 4.1 : 失敗
- Debian gawk 4.0 : 成功
- Ubuntu mawk : 成功
gawk4.1だから起きているのだろうか
とりあえずエラーが発生している部分を洗い出してみることにした。
bashrcに書き込んだファイル内でawkが出ている部分が原因だろう。
該当行はすぐに見つかった。
~/.pythonbrew/etc/bashrcの26行目
そこだけしかawkは出ていない。
その部分を抜粋する
PATH_WITHOUT_PYTHONBREW=$(printf “$PATH” | awk -v RS=: -v ORS=: “/${PATH_ROOT//\//\/}/ {next} {print}” | sed -e ‘s#:$##’)
AWKのことは全くわからないのだけれども、パスを正規表現でチェックしているようだ。
そしてバックスラッシュがエスケープに使って、スラッシュで囲んだ部分が正規表現で評価する部分になるだろう。
で、よくわからないけれどバージョンでエスケープする必要の仕様が変わったんじゃないか?
でそこら辺を重点的に何度も何度もスラッシュをとったりバックスラッシュを外したりして、エラーが出ないように試してみたら
以下のように編集をするとシンタックスエラーが出なくなった。
PATH_WITHOUT_PYTHONBREW=$(printf “$PATH” | awk -v RS=: -v ORS=: “/${PATH_ROOT//\//\/}/ {next} {print}” | sed -e ‘s#:$##’)
↓ 赤い部分を削除
PATH_WITHOUT_PYTHONBREW=$(printf “$PATH” | awk -v RS=: -v ORS=: “/${PATH_ROOT//\//}/ {next} {print}” | sed -e ‘s #:$##’)
このように変更した後、bashrcも設定したらちゃんとpythonbrewが認識されるようになった。
一応インストールもできているみたいだ。
自己責任でお願い
awkの仕様など全くわからない中で適当にやってできた問題解決法なので、何が起きても責任取れません。
あとawkに詳しい方、解説まってます。