Mac(M1)にPython環境準備してみたけれど大変だった記録

## 初めに

※※備忘録です※※

私はただのPython初心者です。
ググりにググりをさねて環境構築中のため、
もしかしたら間違ったこと・不要なこともしているかと思いますので
ご留意の上、優しく見守ってください。
（当然のごとく当たり前のこともやってしまっています。）

### 今回の経緯
Python勉強したいし、作りたいものを開発しようと構想ねって
いざ作ろうとしたら
M1のMacにしてからPython環境作っていなかったことを思いだす
段取りの悪さを発揮した今日この頃。

ググりながら今必死こいて環境整えています。

## PC周り

- OS：macOS Monterey
- MacBook Air （M1,2020）
- エディタ：VScode


入れたPythonバージョン
- Python 3.10.8


## やったこと・やること

1. VScodeに拡張機能を追加する
2. [PYENV入れる](#PYENV入れる "PYENV入れる")
3. [Pythonインストールする](#Pythonインストールする "Pythonインストールする")
4. Condaで仮想環境準備する（今ここ）

今回は1〜3までの内容を投稿しています。


### VScodeに拡張機能を追加する
VSCodeにPythonの拡張機能をインストールしました。
これで.pyファイルを触って実行するまでの流れができました。

## PYENV入れる

読んだ記事の中では「homebrew」を使って入れる、というものが多かったのですが
私の環境ではhomebrewとの相性が悪かったので

Gitからインストールする方法で進めました。

### GitからPYENVをインストール

```terminal:ターミナル
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
```

エラーの定めを背負っている私がそう簡単にするっとインストールできるわけもなく
その直後に出たエラーがこちら

```terminal:エラー
fatal: unable to connect to github.com:
github.com[0: 20.27.177.113]: errno=Operation timed out
```

unable to connectていわれているから、
おそらく外部からの接続許可ゆるされてないんだと思う（たぶ...n...）

ということで、gitではなくhttpsでインストールできるかを試すため、
次のコマンドを実行

```terminal:ターミナル
git config --global url."https://".insteadOf git://
```

そしてもう一度コマンド試したら

```terminal:ターミナル
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
```

インストールできた!


### パスを通す

続いてパスを通します。
私の環境ではzshでやろうとしたらできず
bashで通すことができたので、その時のコマンドがこちら

```terminal:ターミナル
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

source .bash_profile
```

なんでbash使えたのかが疑問だったのですが、
うる覚えの記憶だと、フロント開発環境作る時に何かやらかしたんだと思います...
元々zshだったはずなので...

パス通せたかを確認するためにPYENVのバージョンを確認します。


```terminal:確認と結果
pyenv -v
pyenv 2.3.6-4-g904fe964
```

(後ろの-g904fe964が気になるけど、これ、PYENVの影響だよなぁ..)
(と思ったらpythonインストールした後にpyenvのバージョン実行したらpythonと同じバージョンになったので安心した)


## Pythonインストールする

PYENV入れれたのでPythonをいよいよインストールします。

Pythonの書き方変わってくるかもなので一応2系と3系入れとこうと思ったけれど....
2系は入れませんでした。

2系入れようとした時にエラーも出たので備忘録として残します。


```terminal:ターミナル
pyenv install --list
```

インストールできるPythonのバージョンを知りたいのでPYENVで一覧を出します。
最新であろう、2.7.18と3.10.8のインストールを試みます。


```terminal:エラー
pyenv install 2.7.18

ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

詳しいことはちゃんと把握していないのですが（ダメな例）
シンボルが環境の中に入っていない、いや対応していない...な感じのことを言っているのだと、
そしてM1になってからMacにPythonが入っていないと聞いていたのでその影響なんだろうな程度に考えていました。

なので
「古い系統より新しい系統で勉強した方が今後いいよなぁ....3から始まるもの入れよう」
という結論に至りました。

3.10.8のバージョンはするっと入ってくれました。

### グローバルに通す

インストールできたのでローカルかグローバルに設定します。

私はとんでもないチキンオブハートなので、最初ローカルに通しましたが
今後も色々触りたいなと思ったので最終的にグローバルに変更しました。

```terminal:ターミナル
// ローカルだったら
pyenv local 3.10.8

// グローバルだったら
pyenv global 3.10.8
```

設定したらPythonのバージョンが切り替えできるか、入っているか確認するためにバージョンをみます。

```terminal:確認と結果
python --version 
Python 3.10.8
```

これでとりあえずPythonをMacに入れることができました!


## VSCodeでPythonファイルが実行できるか確認する

Pythonを入れることができたので、簡単なサンプルファイルを用意して実行を確認します。
サンプルファイルと言っていますが、みなさんご存知のHello Worldを表示するだけです（笑）

```py:test.py
print('Hello World')
```

追加した拡張機能で実行ボタンがあるのでポチっと押すと
無事出力が確認できました!


## 番外：PYENVの逆襲

結論から申しますと、今回はパスを通し直してglobalに変更しました。
ただ、これは根本的な解決ではないので良い方法探しています。

- - -

Pythonを入れれたのも束の間。
実は最初にLocalで設定してしまったがために、
VSCodeでサンプルファイルを試そうとしたのですが実行できなかったのです...
（実行できなくて当たり前なのですが）

ゆえに、globalにし直しました。
びびって最初からlocalに設定する癖を直したい。


なので、globalコマンドを実行したのですが

```terminal:エラー
command not found: pyenv
```

コマンドないっていわれました（笑）

「えええええ、さっき入れたやんけぇぇぇぇ」
とセルフ発狂しかけましたが、

「あれ、この事象どこかで.....前にも似たようなこと起きてたよな..?」

そう、パス毎回通さないといけなかったはず〜〜の記憶が蘇り、
それと同時に毎回パス通さなくても良い方法も目にして一度は実行しているのです...

しかし残念なことに、毎回パス通さなくても良い方法のメモを紛失しました.....


最初の方にも書きましたが、[PYENVを整える際に入れたパス](#パスを通す "パスを通す")を再度入れ込んで
globalに変更しました。（その後VSCodeでtest.py実行できました）


## 次回：Condaで仮想環境を準備できるのか。

Python扱っているエンジニアさんに開発環境の件を相談したところ
「Conda使ったら？」とアドバイスいただけたので環境準備しようかな〜と思っております。

今は下準備中で（入れ方とどういうものなのか）調べているところです。

### ※11/15現在
まだ途中ですがminiforge3を使って環境を作っていっています。
[miniforgeを使ってM1 MacにCondaの環境を準備する](https://qiita.com/cocco0141/items/fe92dc6400f37b803c1f)