仮想環境作ったつもりなのにライブラリが呼び出せない!|python初心者の学び
pythonの仮想環境について習得したい!
もうこのために10月の3連休をほとんど費やしました。
そしてようやくたどり着いた解決策が、いかにも初心者っぽいオチだったので、これはnoteにでも書き残さないとタイパが合わないぞ!
ということで記事にしました。
はじめに
これは私のような python初心者の方の参考になればという記事でもありますが、 python上級者で、人に pythonを教える立場の人にも参考にして欲しいな、と思っ書いています。
いかに初心者が思わぬところでつまづくのか?
そういった視点でもお役に立てれば幸いです。
そもそも何やってるの?
さて、そもそもどうして仮想環境というものに取り組もうとしたのか、その経緯を簡単に解説しておきます。
「10月これやる宣言」にも書きましたが、会社で生成AIワークショップなるものに参加したこともあって、10月は pythonの勉強するぞ!そしてOpenAIのAPIを使ったアプリをつくるぞ!ということで休みの日もいそいそと勉強をしていた訳です。
最初はGoogle Colabを使ってました
pythonを触るのも初めて、という状況だったので、以下の本を会社の人から紹介されたので、Amazonで購入して頭のページから順番にGoogle Colabで勉強をしていました。
大変よくできた本で、「お! pythonって簡単じゃん!」と誤認するほどサクサクと書いてあることが実行できていきました。
クラウド上に機密情報を置いてはならぬ!
しかしここで転機が訪れます。
それは、「機密情報を扱うにはGoogle Colabではダメ。ローカルにて開発すべし」という事情が出てきたからです。
そこでこれまた会社の人に薦められたVSCode(Visual Studio Code)を使うことになりました。 Apple信者の私としては、「ちぇっ、Microsft製かよ」と軽く舌打ちしつつも、ネットで検索しても大体おすすめコードエディターとして一位に出てきます。それならしゃあないな、と思い自宅のMacにもVSCodeをインストールしてみました。
で、Google Colab上で書いたソースを単純にそのままコピペしたら、エラーで動かない! ライブラリのインストールからやり直そうとしたら、今度はライブラリーのインストール自体でエラーが出まくってインストールできない!
AnacondaなるものがUdemyの python講座で推奨されていたのでインストールしてみるも、残念ながらエディターはPycharmとやらを使っている。調べてみたら2023年10月現在、Pycharmの無料版は無くなっている!だから開発はVSCodeでやるしかない。(まあ、会社の人もVSCode使ってるから、その方が何かと先々も良いというのもある)
こうして、自宅のMacに仮想環境を構築する旅が始まったのでした。
まさかこんなにも長い旅になるとは思いもせず・・・・
そして探求の旅は始まったのだった
ここからは私の辿った旅路を時系列順に書いていきます。
序章:Pythonがいっぱい
あらためてアプリケーションフォルダを見て見ると、Python2.6、Python2.7といくつもPythonが入ってました。うーん、これ一体どれが起動してるんだろ?もしかしてこれが原因なのかも。以前Anacondaを使ってPythonをインストールした事があったので、その残骸も残っているようです。
これはもう、どこに何が入っているか分からんぞ・・・
仕方ない、一度全て削除だ!!
というわけで、一度Pythonをすべて削除して入れなおすことにしました。
折よく10月の3連休です。ここは腰を据えて環境構築からやり直すぞ!
そうして片っ端からPythonを削除していきました。
Anacondaも削除です。「AnacondaとPiPは混ぜるな!」という恐ろしい記事を読んだからです。最悪の場合、Pythonの環境が壊れてしまうとか!いやもう、これかもしれん、と思いました。
さらにAnacondaは、アプリケーションフォルダの中身をゴミ箱に捨てるだけではゴミが残るらしく、これにはanaconda-cleanというパッケージを使いました。こちらも下記の記事を参考にやりました。
pyenvをインストールだ!
どうやらPythonの環境を切り替えて使うには、pyenvまたはcondaというツールを入れると良いようです。下記の記事が分かりやすかったので貼っておきます。
詳細は省きますが、一通り書いてある通りにやったところ、着々と仮想環境らしきフォルダが出来て来ました。
$ pyenv install 3.9.18
$ pyenv virtualenv 3.9.18 llamaindex
.bashrcというファイルに設定を書き込むらしいのですが、
仮想環境はできているのに・・・
MacOS標準のターミナルで実行した結果、仮想環境は構築できているし、アクティベートもできている。さらにパッケージのインストールもうまくいっている。
なのにVSCode上ではimportでライブラリを呼び出せない!という事態に陥りました。
なぜ??
pip listで見てもちゃんとリストに出てくるのに。。。
さきほどのサイト以外にも色々調べて、ターミナルから以下を実行するも解決しません。
$ pyenv global <作成した仮想環境名>
さらに調べてローカル環境で自動的に仮想環境を切り替えるようなファイルも設定してみました。
.python-versionに以下の通り仮想環境を記述しました。
それでもライブラリが読み込めないのでさんざん悩んだ挙句、ChatGPTに教えを乞う事にしました。
もしかしてVSCodeだけの話?
ChatGPTに質問します。
「VSCodeでインストールしたパッケージがimportコマンドで呼び出せません。 どうやら仮想環境が正しく設定できていないようです。 現在、どの仮想環境がアクティブになっているか確認する方法を教えてください。」
すると以下の回答が出てきました。
なに?下部のステータスバーだと?
あ!3.9.6のままだ!
ここを押せば良いってこと?
あー!
出ました!出て来ました!!
これまで作ってきた仮想環境たちが!!!
そうか、、、、そういうことですか。
必死にターミナルの中で仮想環境を切り替えようとコマンドを実行していたのに、VSCodeさん、あなたは頑なにそれを無視して自分の設定を維持していた訳ですね。。。。
なんだよ、そういうことかよ!!!
ターミナルで仮想環境切り替えたら、VSCodeのインタープリターの設定も切り替えてくれよ!(仕様に文句をつけるw)
いや、そうか、そうなんだよな、そもそもターミナルからコマンド打たなくても環境切替が簡単にできるように作られてるんだよね。
VSCodeのヘルプとかチュートリアルとか、一切無視して使っていた私が悪うございました。はい。
終章:ついに仮想環境の切り替えに成功!
ということで、無事に仮想環境を切り替えて、Vscodeから呼び出して使う事ができるようになりました!
連休3日間を費やして、ついに長い旅路に終わりがやってきたのです。。。
いやあ、長かった。
しかし初心者ってどこで躓くかわかりませんよね。
まとめ
まだまだ使い始めたばかりのVSCodeですが、これ初心者には多機能過ぎて難しいです!
それにローカルPCに複数のPython環境を構築して切り替えるというのは、思った以上に開発の基礎知識が無いと大変だという事が分かりました。
なので、最初はGoogle Colab上で環境構築して、本なりUdemyなりnoteなりを見ながら、なるべくそのままコピペさせてもらって勉強するのが良いと思います。
そうして一通り「お!動いたぞ!」という達成感を味わってから、ローカルPCでの開発環境構築に臨んだ方がモチベーション上もよろしいかと思います。
そしていよいよローカルPCに仮想環境を構築するぞ!となった際には、本記事を少し思い出していただけると嬉しいです。
おまけ
最終的にはChatGPTに聞いて解決しましたが、これだって「あ?もしかしてOS標準のターミナルではできてるけど、VSCodeの中ではできていないってことか?」ということに思い至り、先の質問を思いついた訳です。
それ以前にも色々ChatGPTには質問していたんですよ。
「pipで確認できたパッケージなのに、importで呼び出せない理由はありますか?」とか、
「pyenvで作成した仮想環境をアクティベートするには?」とか。
その都度ChatGPTは(恐らく)適切な解答を出してくれていたと思うんですが、VSCode上のターミナルで操作しているなんて知らないですからね。(だって伝えてないもん)
一生懸命、OS標準のターミナルでのコマンドを教えてくれていたという訳です。
ちゃんとMacの場合はこれ、Windowsの場合はこれ、というところまでは教えてくれていたんですが、「もしかしてVS Code上のターミナルで操作してます?それ意味ないですよ!」なんてところまでは教えてはくれなかったのです。
もしかしてGPT4なら、そこまで想像力を働かせてアドバイスしてくれたんでしょうか?
最初からそれをもう一度試す元気はないので、いつか機会があったら試してみることにします。(いつかは永遠に来ない気もしますが)
このように初心者は、上級者が思い付かないようなところでつまづきます。
なので、今まさにつまづきから学んだばかりの初心者がこういった記事を残しておくことは、多少なりとも意味があるんじゃないかなあ、と思います。
そして、上級者の方は、「あ、初心者ってそんなことにも気づかないのか!」ということを学んでいただけると、今後の教え方に幅ができるのでは、なんて思います。
ここまで読んでいただき、ありがとうございました。
またお時間ある時にでも立ち寄っていただけたら幸いです。