先日、当サイトをSSL化したんですが、その過程でpythonの別バージョンが共存する事になってしまいました。
当サイトの環境は
CentOS release 6.10で、pythonは2.7と2.6が共存しています。
ことの始まりはSSL化なんですが、それに伴ってyum updateが動かなくなってしまいした(今は動いています)。
そこで原因を特定しようと普段はまったく使っていなかったデバッガーpdbを使ってみようと思ったわけです。
pdbが動かない
いつインストールしたのか忘れてしまいましたが、私の環境ではインストール済みだったので、インストール方法については他のサイトを参考にして下さい。
さて、問題は『起動』です。
さすがにyumそのものに変更を加えるのは、怖いので、ソースコードを弄らない方法で使う事にしました。
方法は簡単でpythonを起動する時に、-m オプションを付けて pdbを指定するだけです。
$ python -m pdb [デバッグ対象ファイル]
私の場合はyum走らせてみたかったので、
$ python -m pdb yum check
checkはyumへの引数です。付けた理由は、「このオプションなら、途中で強制終了させても、悪影響がないだろう」と思ったからです。何の根拠もありませんので、マネする時は自己責任で!
さて・・・エラーとなって動きません。
エラー・メッセージを読むと、「yumが見つからないよ」みたいな内容だったので、yumの位置を探しました。
$ which yum
を実行して、yumの位置を確かめてから再度実行すると、今度は「rpmが見つからない」と言っています。
ここで、かなりのパニックになりました。だってyumからrpmが見つからなかったら、yumが動くわけないじゃないですか・・・
そこで初めて別バージョンのpythonが起動していることに気づき
$ which python
で確認したところSSL化の時にインストールした2.7が動いている事がわかりました。
最終的に
$ /usr/bin/python -m pdb /usr/bin/yum check
で動きました。
pudbが動かない
最初は、気を良くしてpdbを使っていたのですが・・・やっぱりCUIって使いづらい・・・
「もう少しマシなデバッガってないのかな?」と思って探してみたら、ありました。
pudbってヤツです。
早速インストールです。
$ pip install pudb
これだけですが、インストール方法に関しては他のサイトに譲ります。
さて、問題は『起動です』(笑)
最初はテキトウなpythonで書かれたファイルを起動してみました。
$ python -m pudb test.py
pdbの時と同じで -m オプションの後のpdbをpudbに変えるだけです。怖かったのでいきなりyumが動かしません。
ここで設定画面が出て来ました。
他のサイトでインストール方法を解説している方がまったく触れていませんが、私はハマったので、書いておきます。
ここから、どうやって抜ければ良いのかわからなくなりました。
下矢印キーでどんどん下に移動して行き、EnterやSpaceキーで設定が変えられる事まではわかったのですが、ずっと下矢印キーを押し続けても一向に右上にある < OK > か < Cancel > に辿り着けません。
答えは右矢印キーでした。
わかってしまえば、バカバカしい限りですが、頭がCUIモードになっていて気づけませんでした。
ちなみにこの設定画面をもう一度開きたい時は【Ctrl + P】です。
終了はq キー を押せば良いのですが、終了しても、GUIの画面が残ってしまいますので、【Ctrl + L】を押さないと画面がクリアされません(私のメモリ環境が貧弱なのが原因で、再現性があるのかわかりませんが・・・)。
pudbでyumが動かない
さて、いよいよyumのデバッグです。
ところが、これが困った事になりました。
pdbの時と同じように、
$ /usr/bin/python -m pudb yum check
とやって見ましたが・・・動きません。
python 2.6からはpudbモジュールにアクセス出来ないようです。
それならと
$ python -m pudb yum check
今度はrpmにアクセスできません。
このような状態になっているんだと思います。
最終的にパスを通す事で解決できました。
# export PYTHONPATH=[環境によって異なります]
PYTHONPATHにrpmへのパスとyumへのパスを通しました。2箇所のパスを指定するには :(コロン) で繋げます。
やっぱりgdbとは格段に使い勝手が違います。全体のコードが見渡せるのと、NキーとSキーだけでステップ実行してくれると快適です。