shine-Notes

ゆるふわ思考ダンプ

Mac OS環境にPython開発環境を構築する私的解(brew+pipenv+pyenv)(2020年11月版)

サマリ

  • Mac OSへのPythonインストールに関する、私的な最適解のメモ
  • homebrew + pipenv + pyenvで、ものぐさに管理された世界を作る

背景

今年の中盤に私物MacBookProを買い替えたのだが、環境構築系は0から綺麗に作ろーかなー、と思いはや半年。いかんこのままでは、と一念発起した。
また本Blogで長期に渡りアクセスを稼いでいるのが、Python入門したての頃に書いたPython3 on mac でpipをターミナルで打っても実行されないという記事で、それから何度もPython環境を構築するようになったので、ここらで自分なりにしっくりするPython環境を作っておきたいと思った。
というわけで本記事はその記録である。採用パターンと、ついでに不採用パターンついても記載しておこう。

採用パターンとモチベーション

結論から書くと、以下の組み合わせを採用した。

  • homebrewからpipenvをインストール
    • この時点でPython3.9もインストールされてPATHも通る
  • homebrewからpyenvをインストール
  • あとは開発する単位でpipenvのプロジェクトを切り、そこでpythonのバージョンを指定する
    • pyenvが導入されていることで必要なバージョンが適宜pyenv経由で導入される


筆者が上記のパターンを採用したモチベーションとメリットについて記載する。

  • homebrewさえ入れてしまえば簡単に終わる
  • 首根っこをhomebrewで管理できる(いざとなればbrew uninstallなどお掃除や管理が楽)
  • 闇雲なpip installを避けてpipenvの利用を常に意識することで、利用パッケージを意識した開発ができる
    • 特に自分の場合、思いつきで1つ作る→GitHubに残す方式を取るので、この方式を取らないと「何のパッケージ使ったっけ…」がリアルで多発する
    • pipenv→pyenvの連携のお陰でPythonのマイナーバージョン導入もスムーズに出来る
  • PATHの追加的な編集作業がいらない
    • PATHの概念/追加の方法自体は理解しておくべきだが、意識しづらい所に変更した設定値を残すことになるのが嫌。

言うまでもなくかもしれないが、Pythonはこの手のやり方が色々あって面倒くさいことこの上なく(後述)、検討したけど採用しなかったパターンについての考察は最後に記載するとして、手順についてざっと記載する。


手順

1. homebrewのインストール

  • homebrewをインストールし、brew search python3Pythonが見える状態にしておく。
    • 前提としてXCodeのインストールが必要。この当りの細かい手順は割愛する。
% brew search python3
==> Formulae
boost-python3                        python@3.7                           python@3.8                           python@3.9

2. pipenv(+python3.9)とpyenvのインストール

  • brew install pipenvにてインストール。
  • この時点でPython3.9がまとめてインストールされる。
  • 続いてpyenvを導入して完了。
% brew install pipenv
(中略)
% brew install pyenv

3. 動作確認

  • pipenvの導入完了時点で、brewから導入されたPython3.9にPATHが通っており、何も指定せずにzshから打ったPython3もそこで解決される。
% which python3
/usr/local/bin/python3
  • 環境構築時は、任意のディレクトリ上でpipenv --python 3.6等と入力することで、該当の環境内で指定のPythonを有効にした仮想環境で開発ができる。
    • 既に存在しているPythonバージョンがあればそちらを、なければ適宜pyenvを通じたインストールが走る。
    • 以降はpipenv install numpy等でパッケージを入れたり、適宜作業する。
    • 環境が不要になった場合はpipenv --rmで仮想環境を削除できる。
    • その他詳しくはほか記事にて

qiita.com

  • 内部的にはpythonvenvの仕組みを使っているが、pipenvを通すことでパッケージ管理に集中できる。

    • 加えてこの手順だとpyenvを過度に意識しなくてもよくなる(と思う)
      • pyenv自体に導入されているバージョンはpyenv versionsで確認できる
  • ここまでの手順で導入していない3.6を指定した例。

% pipenv --python 3.6  
Warning: Python 3.6 was not found on your system...
Would you like us to install CPython 3.6.12 with Pyenv? [Y/n]: Y
Installing CPython 3.6.12 with /usr/local/bin/pyenv (this may take a few minutes)...
✔ Success! 
(中略)
Installed Python-3.6.12 to /Users/user/.pyenv/versions/3.6.12

Creating a virtualenv for this project...
Pipfile: /Users/user/myRepos/python/py3.8-test/Pipfile
(中略)
✔ Successfully created virtual environment! 
Virtualenv location: /Users/user/.local/share/virtualenvs/py3.8-test-XSD53VLK

以上



不採用パターン一覧とその理由

何パターンか採用を考えたけど見送ったもの、昔使っていたパターンについても少し記載する。

ふつうにMac OS標準のPython3.7を利用し続ける。

  • 入門者は始めるのが大事なのでこれで良いと思うが、pip installを何度も打つようになったらpipenv等の仕組みに頼りたい
  • というか今回動かすまでMac OSのデフォルトPython環境に3が増えてたの知らなかった…(Catellina以降なのね)。

Anacondaを使う

  • 迷いどころ。実行の早いパッケージが有ったり、環境によってはビルド済のパッケージが導入できて大幅な工数削減になる。
  • 採用してもいいが、pipを併用するとパッケージが動かなくなるケースが有るので、入門者にも優しいようで微妙に落とし穴があるのが好きじゃない。
  • とはいいつつも、Win環境など一定の条件下だと筆者もminicondaを使う。

今回紹介した手順でpyenvを使わずに、homebrewからPython3.8~3.9をインストールする

  • 実は最初やろうとしたが、見送った。
  • 3.7,3.8,3.9が揃っておりこれでも良いかと思ったが、この方法だとpipenvから他のバージョンのPythonを指定するのがかなり面倒(PATHを通せば可能だがそうなると結局管理が面倒)。

その他env系

  • 一通り見たけどpipenvが今の所一番自分には肌に合ってる。
  • というか**env多すぎませんかねPython界隈……
  • Win環境の場合はWSLminicondaで構築するようにしているが、この辺は気が向いたら別途整理予定。

以上。