はじめに
単語帳アプリを作るためにとりあえずPythonを使えるようにしようと思い、Dockerとかいうのを入れようとしましたがいきなり躓いたので、躓いた点と解決策を備忘として載せておきます。
すごく簡単に言うとバージョン違いのエラーでした。
Dockerとは
仮想環境が簡単に作れるぜ、他の人(または自分)が作った仮想環境を自端末の環境に依存せず使えるようにできるぜ、みたいなやつです。詳しくは調べてください。
Dockerのインストール
まずはDockerのインストールを行いました。さすがにここまでは問題ないです。
以下の記事がとても分かりやすくまとめてくれています。
DockerでPython環境の構築中にエラー
ここで躓きました。
そもそもMacOSでやる人が多いのか、それともWindowsでもLinuxコマンドでやる人が多いのかは知りませんが、たいていの記事はLinuxコマンドで書かれてました。
横着な私はWidows用の記事ないかなーと探していたところありました。どんなことでも探してみれば世の中やっている人が必ずいますね。ありがたいことです。
この記事の通りコマンドを叩いたり、ファイルを作ってコピペしたりしていったら、、出ました!妖怪イワレタトオリヤッタノニ!コンポーズ?をビルド?してからRunしようとしたら以下のようなエラーが出ました。
見ての通り、cgiというモジュールが見つからないというエラーですね。
解決に向けてやったこと
予想を立てる
画像のエラーをはいている直前のメッセージに「import cgi」と出ていることから、命令としては「cgi」とかいうのをインポートしようとしたけど、そんなもんねーよと怒られている感じだと思いました。
いろいろ知らべた結果、下記の記事にPythonのバージョン3.13から「cgi」なるものはなくなったみたいなことが書いてありました。
ということは、自分がインストールしたPythonは3.13以降のバージョンなのでは?
検証
で、実際インストールしたPythonのバージョンを確認するために自分が叩いたコマンドをさかのぼってみていくと…
python3.13のフォルダを参照していたので、多分どこかで3.13をインストールしたのでしょう。
解決策
上記からPythonのバージョンを3.13より前のバージョンにすれば一旦環境構築はできるはず。。
自分でPython3.13を指定した記憶はないので、環境構築で参考にしていた記事でぺたぺたコピペしていたDockerfileを見てみると
「Python:3」という指定はしていました。
ソースとかはないですが、多分「Python:3」としていたら3の中の最新のやつをインストールするんだろうなといった感じ。。
ダメ元で「Python:3.12」に変更して保存。
そして念のためDockerに上がったイメージとコンテナを削除してからcomposeからやり直したところ、、
なんとうまくいきました!!完全にインストールしたバージョンと命令に齟齬があったのが原因でしたね。
学んだこと
バージョン違いによる上記のようなエラーは環境構築で本当によくある話だと思います。私自身何度環境構築がうまくいかず挫折したことか。。しかし、意外にエラー文をしっかり読んで予想を立てて調査すれば案外あっさりわかったりします。
また、最新のものをインストールするという手順書は当然使いやすいのですが、バージョンを指定しないことによって上記のようなエラーが出る可能性があるので注意です。(書いてくれた記事に文句を言うつもりはありません。手順書を使う側が注意、解決すべきことだと思います。)
今回のエラーは多分「import cgi」の命令が実行されている行をどこかのソースから削除すれば3.13をインストールできるはずですが、ちょっとそこまではやり方がわかりませんでした。このまま3.12で使い続けて問題があればまた調査してみようと思います。
・・・てkcgiって何?
また時間があったら調べてみます。