【Mac大手術】ぐちゃぐちゃだったPythonの環境構築をやり直した話【さよならAnaconda】

**「環境構築無しでプログラミングを始められる！」**
この言葉に甘えてはや2年ほどが経っただろうか。そのおかげで僕のPCの環境はぐちゃぐちゃだった。

condaとpipを適当に使い、よくわからないから仮想環境も構築せずに、importしてなかったら適当にpip installして耐え忍んでいた。

いつかはやらないとなー。とか思ってたけど、ついに重い腰を上げて手術することにした。

理由は三つ。
・　Webアプリ開発にも興味が出てきて、環境のことを知らないといけなくなった
・　VSCodeで謎にシャットダウンされ、Pythonファイルが開けなくなりコードが飛んだ
・　Jupyter Notebookで、突如挙動不審になり、言語が本当は一つしか表示されないはずがPythonが二つ出た

まあ正直2つ目と3つ目はVSCodeのバグかもしれないが、環境のせいかもしれないし、いつかは知らないといけない
からと思い、手術に踏み切った。

当然、冒頭の甘い言葉にやられて環境のことは全く知らない。ゼロから調べまくって勉強した。その軌跡をここに記しておく。

# スタートとゴール
僕の環境はMacOS。環境はごちゃごちゃでスパゲッティ。シェルはzsh。

ゴールは、仮想環境をvenvもしくはDockerで管理すること。baseを汚くしない
→venvで管理することにした。まだDockerを使うほど本格的な開発はしない予定なので。

![スクリーンショット 2023-04-29 23.25.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/5cbd9c73-2321-bd0d-ce48-d77d680f1b8b.png)

baseでpip listってやったらこれの8倍はあった。適当にやりすぎた。

## スタートする前に優秀な助手の追加
もちろん、ChatGPT。コマンドとか環境のこととか分かってなかったけど、記事を読みながらChatGPTに聞きまくったらなんとなくは分かった。まじで優秀。大好き。

https://openai.com/blog/chatgpt

# Anacondaをやめる
Anacondaのメリットをあまり感じられてなかったし、condaとpipを混ぜるとやばい、みたいな感じだったから、思い切ってAnacondaを使わないことにした。

## Pythonのパッケージリポジトリは2種類
NumpyやPandasなどの便利なライブラリ、その他パッケージを使うには事前にpip installやconda installでインストールしておく必要がある。どこからインストールしてくるかというと、PyPIやAnaconda Cloudといったパッケージリポジトリからしてくる。

### PyPI
PyPIはPythonソフトウェア財団が運営を行っており、非常に多くのパッケージ、ライブラリが公開されている。2022年12月時点で43万を超えるらしい。

pip installでインストールするものはここからされる。

ただ、誰でもPyPIにライブラリを追加できてしまうため、安全性の面では不安が残る。らしい。

https://pypi.org/

つまり、種類は莫大だけど安全とは言い切れないのがPyPI。

あ、ちなみに読み方は「パイピーアイ」らしい。ちょっと残念。。

### Anaconda
AnacondaはPythonの実行環境で、データサイエンスに必要なツールやライブラリをまとめて提供しているプラットフォーム。そのため、Anacondaをインストールすれば基本的なデータサイエンスは行うことができる。

conda installでインストールする。

ライブラリたちはAnaconda Cloudで管理されており、検査されているがその分種類がPyPIに比べて圧倒的に少ないのが特徴らしい。

https://www.anaconda.com/download/

つまり、種類は限られているが安全なのがAnacondaといった感じ。らしい。

## pipとcondaを併用してはいけない
pipとcondaは犬猿の仲らしい。両者を適当に併用すると最悪環境がぶっ壊れたり、いろいろ不具合が起きるらしい。

お互いは独立したパッケージ管理ツールだから、condaでもpipでも同じパッケージをインストールしてしまい、それが色々あーなってこーなって悪さをするらしい。

pipとcondaで同じパッケージをインストールしたときに特に不具合に繋がるっぽい。

https://utakataworks.com/pip-and-conda-install/

https://onoz000.hatenablog.com/entry/2018/02/11/142347

へー、って思ったけど正直理解できなかった。とりあえずよくないらしい。
まあチームに同じものを管理する人が二人いるけどその二人は一切連絡を取らない、みたいな感じだと管理体制に不具合が生じるよなあって思った。まあそんな感じだろ。

## よくわからんし、Anaconda使うのやーめた
結論、よくわからん。構造が難しい問題は、そもそもその構造が生じないように原因を消し去るというのが僕がよくやる手抜き問題解決方法。

condaの方が種類少なくて安全、かつcondaとpipの併用が良くないなら、
「condaでなかったらpipでインストール」という流れていいじゃん、と思っていろいろ調べたらそうじゃないらしい。

もうよくわからん、condaを使うのをやめれば全て解決や、という結論になった。

https://kandai.hatenadiary.jp/entry/2018/07/16/105940

https://guminote.sakura.ne.jp/archives/661

https://qiita.com/tagucchan/items/7772ccb45ea95e520613

こいつ分かってないな、って思われてそうなので、「だってこの人たちがそういってたんだもん」という言い訳を置いておく。

# YouTubeで動画を見て概観を掴む
何か新しいことを始める時、YouTubeで動画を倍速で見て概観を掴むのは常套手段。
参考にした動画はこれ。

https://youtu.be/6b6uM7Fl8ck

動画では、おすすめの環境構築方法として以下の三つが挙げられていた。難易度が高い順かつおすすめ順に上から並べた。
## Dockerを使う方法
おすすめだけど難易度が高い方法。
Dockerを使って環境構築をするらしい。簡単に作れて簡単に壊せるのがメリットらしいけど、僕はまだDockerを簡単に作れるレベルに達していないので見送り。

てかそこまで大規模に管理する必要がない

## Dockerを使わない方法
Dockerを使った方がいいけど、難易度は高くない方法。
今回採用した方法。あとで詳しく。
簡単にまとめると、Pythonのバージョン管理はpyenv、仮想環境の管理はvenvでやる。

## コラボラトリー
めちゃくちゃ簡単だけど、おすすめではない方法。
コラボラトリーは環境構築不要で、Googleアカウントさえ持っていればipynbを動かせるもの。
GPUが必要なときはこれでやるけど、使い勝手が悪いから僕個人的には好きじゃない。

# 大手術開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/a262835e-583a-35e6-ca0a-e81a2cc06f8b.png)

参考にしたサイトはこれ。
概観を掴む用

https://www.python.jp/install/install.html

まず読んだもの

https://www.insource.co.jp/python-gakuin/mail-backnumber/vol30.html

https://atmarkit.itmedia.co.jp/ait/articles/2106/25/news028.html

https://guminote.sakura.ne.jp/archives/661

https://uniuni-diary.com/what-is-anaconda/

まあ大体ここら辺を読めば道筋はなんとなく見える。そしてこれを軸に進めることにした。

https://kandai.hatenadiary.jp/entry/2018/07/16/105940

なので、Pythonのバージョン管理はpyenv, 仮想環境はvenvで管理する方針に定めた。

## Anacondaの削除

https://weblabo.oscasierra.net/python-anaconda-uninstall-macos/

これを参考にしてやったら、すぐにできた。バイバイ、Anaconda。

Anacondaをアンインストールすると、Anaconda-Navigatorのアプリに「？」が表示される。初めてみた笑
![スクリーンショット 2023-04-30 0.03.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/d3f3822c-6fdb-d974-293b-5eb50794002b.png)

まあ実は昔もAnacondaがなぜか動かなくなったことがあって（多分pipとの併用が原因）Anacondaを再インストールしたりした。つまり過去何回も別れている恋人とまた別れたわけだ。（？）ということは。。？

## pyenvの削除
基本的にこの記事を参考にして真似したので、なんでかはわからないけどいろいろいじってとりあえず削除。

https://kandai.hatenadiary.jp/entry/2018/07/16/105940

とりあえず削除。実はここら辺でpipやpythonが使えなくなっていてやや焦ってた
（あれ・・？心停止しちゃった？）

```
zsh: command not found: python
pip not found
```

## pyenvのインストール
とりあえずインストール。
しかし、ここでエラーが出た。

```
Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
```
ああ、忘れていた、Appleシリコンによる弊害を。
ただ、流石にもう情報がネットに溢れているのでググって解決しようと思っていろいろ調べているうちに脱線してなぜかPythonのアンインストールに行き着いた。

## pythonのアンインストール
pythonがパソコンの中にいくつもあったのでアンインストール。ほんと不思議。いつの間にか増えてるんだから。もしかして自己増殖する？

https://code-graffiti.com/how-to-uninstall-official-python3-on-mac/


https://zenn.dev/minamiso/articles/4b4d319600cdd7


これを元にやった。結局全て消そうとしたら一個だけ「permission denied」みたいに怒られちゃったのでそれだけ残して他を削除。

## Homebrewのアンインストール
brew listコマンドを打ったら大量に出てきて汚かったので、半分勢いでアンインストール。

https://www.momohuku.tokyo/post-79283/

友達と喋りながらやっていたので勢いでやっちゃってますが、皆さんはもっと慎重にやってください。取り返しのつかないことになるかもしれないので。知らんけど。

# 再構築開始
摘出は終わったので、新しいツールたちにパーツ替え。
## pyenvのインストール
pythonのバージョンを管理するためのツール。pyenvがあるおかげで複数のpythonバージョンを分けて使うことができる。pyenvは使わなくてもいいらしいけど、参考にした記事が使ってたから使った。

https://zenn.dev/unsoluble_sugar/articles/283ebf698c307c

https://webbigdata.jp/post-9217/

参考にした記事はどっかにいってしまったので、まあ多分ここら辺の記事を読めばできる。

https://medium.com/@jyotti/macos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpython%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83-864a928e9734

なんかこんな記事もあったが、見て見ぬふりをした。知らない。
## 新しいpythonのインストール
この三つのコマンドでいけた。はず。
```
pyenv install -l
pyenv install {インストールしたいpythonのバージョン}
pyenv global {インストールしたpythonのバージョン}
```

python -Vで確認。
無事、3.11.3が出てきたので完了。pipも復活。

まあ何か詰まったらこれとか見れば多分おけ

https://qiita.com/mogom625/items/b1b673f530a05ec6b423


# さあ、仮想環境の構築をやろう
途中Anacondaを消したせいで使えなくなったPythonとpipも、新しいpythonをインストールしたら治ったので手術は完了。18時間かかった。笑（まるまる作業してたわけではないけど）

さて、ここからは再発防止に向けた仮想環境づくり。もちろん、仮想環境とは何かから理解する必要があったのでまた記事を読みまくった。

https://www.python.jp/install/windows/venv.html

https://maku77.github.io/python/env/venv.html

https://webbigdata.jp/post-9217/

ここら辺をさーっと読めば大体わかった。あとは仲間に聞いた。笑　持つべきものは仲間や。

一つ勘違いしていたのは、仮想環境ではbase環境にあるものも使える、baseにないものを仮想環境で補うといったイメージだったが、違った。仮想環境は仮想環境で独立しているので、毎回Numpyやpandasをインストールする必要がある。

それは面倒なので、requirements.txtによく使うものは書いておいて、それを最初にpip install -r requirements.txtで読み込んで一気にインストールするのが主流らしい。

あと環境管理ツールはこの記事とかを読んで決めた。

https://www.zopfco.de/entry/2017/04/03/233811

結局初心者だし、公式が出しているものは安心感があるのでvenvにした。

# Gitの再構築
なんかこれを機にGitもHomebrewで管理しよっかってことになって元々のGitではなくHomebrewのGitに変えることにした。意味があるのかはわからない。アップデートとかしやすいらしい。

https://zenn.dev/inablog/articles/25f6ac101d0b45

結局HomebrewからGitインストールして、.zshrc書き換えてPATHをHomebrewのGitになるようにした。

そのあとProgateのGit環境構築をやり直して、完了。

https://prog-8.com/docs/git-env

ここら辺は難なくできた。

# まとめ
## これからの管理方法
python: pyenvで管理
仮想環境: venvで管理
とりあえずはこれでやってみる。それで不便だったらまた調べて変える。

## 感想
いやー、疲れたけど無事に終わってよかった。今回いろいろ環境のことを触ってすごく勉強になったからいい機会ではあったと思う。プログラミング初心者の「環境構築不要！」に甘えてきたしっぺ返しをくらったけど。

あと、シェルとかバージョン管理ツールとかいろいろ触って、まだまだ知らなきゃいけないことがたくさんあると実感できたので、これからはそこら辺の勉強もしっかりしていきたい。

https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc

https://zenn.dev/suyaa/articles/948ed137d1e46e

これとか見て。

あと、手術中の心の動きはここにまとめたので、見てみてね

https://twitter.com/A7_data/status/1652307795365220357?s=20


## エラー出てたけど原因を知らなくて全然解決できなかったもの

.zshrcとかの中、PATH = 〜とかはダメらしい。（スペース入れちゃいけない）
スペース入れてsource ~/.zshrcってやったら
/Users/ユーザー名/.zshrc:2: bad assignment
って怒られて環境壊しちゃったかと思って焦ってた。

でもスペース消したら行けて、そーゆーことか！ってなって安心した。
正しくはPATH=で書かないといけない。

## 疑問に思ったことはChatGPTで解決
他の人とプロダクト開発する時、python以外のプログラムもあるけどそれvenvで管理できるの？
→例えば、バックエンドをPython、フロントエンドをJavaScriptでやっている場合は、それぞれ仮想環境管理ツールを使えば良いっぽい。Pythonはvenv, JavaScriptはnpmかyarnみたいな。

らしいです。

## 参考になるかも
<a href='https://amzn.to/3HsBYt3'>クリーンな開発環境構築入門（Python版）</a>
今回は使わなかったが、Kindle Unlimitedで無料なので、この本を参考にしても良かったかも。

<a href="https://www.amazon.co.jp/Docker-Desktop-Windows-Mac%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%81%AA%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-Python%E7%89%88-ebook/dp/B08D8TXXHD?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3I5U6114XJFJK&keywords=python+%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89&qid=1682867132&sprefix=python+%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%2Caps%2C250&sr=8-1&linkCode=li2&tag=joshikiblog-22&linkId=88a61413d2e8c51d7b19bd87c42b0108&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08D8TXXHD&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=joshikiblog-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=joshikiblog-22&language=ja_JP&l=li2&o=9&a=B08D8TXXHD" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


# 最後に
普段はツイッターでデータサイエンスに関連する無料の優良教材などや自分の勉強経歴など、見ている人のモチベを上げるような情報発信をたくさんしている。
ぜひ見てね。

Twitter→<a href='https://twitter.com/A7_data'>@A7_data</a>

無料の優良教材をたっくさんまとめた記事はこちら

https://qiita.com/mohki7/items/c3f26916d79a0e3269cc