patorashのブログ

方向性はまだない

WSLでpipでインストールしたモジュールが見つからなくてハマった

年末からいまだにPCのセットアップが終わらず…。 Windows Subsystem for Linuxにて、Ansibleにて環境構築手順をまとめていってるのだけれど、Windows UpdateでPCを再起動した後にWSL on Ubuntuで再びansible-playbookを実行しようとしたら、command not foundと言われた。

いやいや、動いてたじゃない…。どーしたのよ…。と思ってpipでansibleを再インストールしても状況変わらす。which ansibleしても何も表示されず。必死に「pip ansible not found」とかでググるも、イマイチわからず。

ホームディレクトリでls -laして、何気に.profileを見つけたので中身を見てみたら、pipのモジュールに対してパスを通してそうだったので、source .profileを実行したら、キタコレ!which ansibleしたらパスが表示された!

原因

原因は、.bash_profileがあったから。anyenvをインストールしたタイミングで、anyenvの初期化処理を.bash_profileに追記していた。Macのときにそうしていたから特に何も違和感を感じていなかったのだけれど、これが大問題だった。

設定ファイルの読み込み順について

参考URLに書いてありますが、bashはログインしたタイミングで設定ファイルを読み込みますが、その順番があります。

qiita.com

  1. まず、/etc/profile を読み込む
  2. その後、以下の順番で見つかったファイルのみを読み込む
    1. ~/.bash_profile
    2. ~/.bash_login
    3. ~/.profile
  3. .bashrcは読み込まないが、.profileで.bashrcがあれば読み込む設定が書いてあった。

自分はファイルの読み込み順はあるけれど全部読み込むと思い込んでいた。そのため、.bash_profileを作って満足してしまっていた。原因はpipでもなんでもない。bashの設定ファイルの読み込み設定だったのだ…。pipを疑って悪かった。ごめんなさい。

解決法

.bash_profileに追加していたのはたったの2行だったので、それを.profileに追記し、.bash_profileを削除した。

cat .bash_profile >> .profile
rm -f .bash_profile

そしてログインしなおしてみたら、which ansbleしても、ちゃんと動いた。 こういう初歩的なところもよく見落としてしまうので、ほんま勉強しなおさんとなぁ…。