仮想環境という概念を知ろう
前提:
brew
がインストール済みの MacOS
ちょっとしたエピソード
身の回りでこんな現象をよく聞く。
- 登場人物
- A さん:プログラミングを始めたてで日々精進している。
- B さん:大学の授業以外ではプログラミングは一切しない。
- C 先生:ごく一般的な大学の先生。
A さん「プログラミング独学始めるぞ!公式サイトに行って Python をインストーーール!」
A さん 「これどうやってやるんだろ。(検索中)。なるほど、pip install (...)
か!できた!」
〜〜数日後、授業でもプログラミングがはじまる〜〜
C 先生「Anaconda をインストールして下さい。」
A さん「はーい。」
B さん「はーい。」
〜〜外部ライブラリを使っていると…〜〜
A さん「あれ、外部ライブラリが使えない。なんで!?」
B さん「俺、普通に使えるけど?」
熱心にプログラミングの勉強をしている人ほど PC 環境が荒れていく…
これが起きてしまう理由
原因
これは、A さんの PC 内に Python(のインタープリタ)が、独学用と授業用の 2 つ存在してしまっていることが原因の可能性が高い。ターミナルから Python ファイルを実行するときは python a.py
というコマンドを打つが、これは /usr/bin/python a.py
や anaconda3/bin/python a.py
とかの略である。 python
がどっちを指定しているかは、環境変数というもので定義されている。
ただ、これをいじるのは面倒だし難しいし危険なこともある。
背景
この問題が起きるのは正直仕方ない。外部ライブラリを管理するツールである pip
を使う場合、 外部ライブラリの管理を自力でやらないといけない。なので、もし授業で使うとなると先生がいちいち指示しなければならなくなる。
そこで、Anaconda というソフトは大体の人が使いそうなライブラリが同封されているので、先生は「このソフト入れといて」と指示するだけで済む。 参考書の 0 章で Anaconda が紹介されている理由もこれだろう。
ただ、インターネット上では、どちらかというと pip
の方が人気なので、 気づかずに環境を衝突させがちになる。
解決策: python は pyenv で入れよう
1
2
3
brew install pyenv
pyenv install 3.10.0 <- お好みのバージョン
pyenv global 3.10.0 <- お好みのバージョン
これで python 3.10.0 がインストールされる。 とりあえず最新版を入れておけば問題無いが、Python に限らず新しすぎると他のツールが追いついてなかったりネット上の情報が積もってなかったりするので、2 個くらい下のバージョンの方が安定する。
もしやらかしたら
1
2
3
which python
python --version
pyenv versions
とかを見れば自分がどの Python を使っているのかが分かる。 とりあえずこれを実行したときのスクショを先輩に見せれば良い感じのアドバイスがもらえるかもしれない。
ライブラリレベルの仮想環境は venv で入れよう
と思ったけど、はじめのうちは混乱の元になるからやらなくて良いと思う。
- プロジェクト毎に環境を分けると PC のストレージを割と圧迫するっぽい。
- 複数プロジェクトを並行でやっていると混乱する。
- tensorflow みたいに、バージョンがちょっと変わると挙動がめっちゃ変わるライブラリの場合は、仮想環境が必要。
- Pipenv とかの他のツールもあるけど、個人的に venv で十分。デプロイ先が Pipenv に対応してないから venv で作り直すこととかもあったし。