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

カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

Pythonの開発環境をよーく考えた上で構築する その1

備忘録に近いですが、Pythonのバージョンでもう苦しみたくなかったので、もろもろいじってみました。
とりあえず、第一弾。Pythonインストール編です。

とりあえず、課題認識。

  • 流行ってるし、面白そうだしNode使いたい
  • Nodeをそのままソースから入れると、バージョン毎になんか色々モジュール管理で大変になった
  • どうせならpipとかnpmとかで管理したい
  • 一言で言えば、PythonやNodeのバージョンごとになんか色々モジュール入れなきゃいけなくて、マジカオス
  • しかも、何入れたか記憶にない。覚えてない
  • そして、historyとかをgrepしたりlessするのめんどい
  • ということで、バージョン管理大事なのはわかった
  • ただしPythonの依存関係は鬼だから、なんとか頑張るべ

こういう認識でいました。カオスだから、とりあえず改めようと。
なので、改めるためにまた色々やろうとしたら、失敗したという悪例を紹介します。

まず、複数のPythonのバージョンを切り替えられる「pythonbrew」を入れます。普段もろもろ遊んでサーバを見てみると、2.4系が入ってる。だけど、/usr/bin/pythonにシンボリックリンク張られていて、yumで入れた形跡があるのになんか気になるっちゃ気になる感じ。なんか昔Pythonのバージョンまわりで嫌な思い出があったような気もして、なんかした気がするから尚更。まぁ、現状把握はそのへんにして、pythonbrewに任せられるようにしようとやってみた。

# cd /usr/local/src
# curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
# chmod +x pythonbrew-install
# ./pythonbrew-install
# which pythonbrew
# whereis pythonbrew

※なんか/root/.pythonbrew/以下に色々入った。それだとなんか気持ち悪いのでパスを指定して入れ直し

# export PYTHONBREW_ROOT=/usr/local/pythonbrew
# ./pythonbrew-install
# cd /usr/local/pythonbrew/bin
# ls
# pythonbrew install 2.6.6
# pythonbrew install --force 2.6.6  なんかインストールできなくてログみても、さっと分かりそうになかったので、forceしちゃいなよと言われたからしてみる
# pythonbrew switch 2.6.6
# python -V

違うバージョン入れないならこんな感じ
# export PYTHONBREW_ROOT=/usr/local/pythonbrew
# pythonbrew install --force 2.4.4
# pythonbrew switch 2.4.4
# python -V

ここまでが悪例です。多分Python普段から触ってる方とか、勘のいい方は気づくと思うのですが、これだとよろしくないことが発生します。

一例をあげるなら、「yumが動かなくなる」…

昔ごにょごにょやっていたとき気づいたのですが、yumってPythonで書かれてるんですね。なので、Pythonまわりといじると、yum動かないということがよくあります。別にyum使わなきゃよいんですが、ちょっと必要と思ったときに限って、こういうこと起こるんで、悲劇でした。

まぁ、だったら、/usr/bin/yumをいじればいいだろうと思ってやってみました。

#vi /usr/bin/python
で一行目を

#!/usr/bin/python

とか

#!/usr/bin/env python

やってみる。
これだとダメなようです。

yumのソース見ると、

try:
import yum

してて、ここで失敗しててエラー吐いてる。

どうもPythonのライブラリでyum呼んでるようだけど、
pythonbrewでいれたやつだとどこかが違うっぽい、というとこまで思ってそこから先調べようと思ったけど力尽きていたので、
yumで入れてたバージョンを直指定。

#!/usr/bin/python2.4

とりあえず動きましたとさ。

じゃ、よい例ってなに?

LLにしても、普通は管理者がいて(というか絶対いるw)、その人がバージョン決めるんじゃないのというのがサーバを何年も触ってきて、思ってきた印象です。Perlならこのバージョン、PHPならこのバージョン使ってね、みたいに大学のサーバでもレンタルサーバでも、自分が管理してるものでも、そういうような記憶や認識があります。
「バージョンは決められたもの」だと。「ユーザに選択肢はない」と。
どうやら、Pythonの場合、違うようなんですよ。
ユーザのディレクトリに、仮想環境みたいなものを作って、そこで好きにバージョンを使えばよいんじゃない?という感じがして仕方がない(あくまで若葉マークついた人の甘い甘い認識)。

なんで、root権限とかsudo使わず、ユーザの作業ディレクトリでpythonbrewもやるべきだったっぽい。(確かにpythonbrewを作った方のサイトでも、ユーザ権限でpythonbrew入れてる…)

ということで、インストールするユーザとか環境を考えて入れていくのがPythonなんじゃないかと思った次第です!

まぁ、このあとnaveやpip含めて色々書けるものを書いていきたいですが、とりあえず第一弾として、自分が躓いた点をメモとして書いておきます。

どなたか、こうすればよいじゃない、こういう方法もあるよ!と優しくアドバイスしてくださる方いたら是非是非教えてください!!