macでpythonの開発環境を作るために、pipenv、venv、anaconda、pyenvなど初学者である私には、最初一体どれを選んだらいいのかさっぱりわかりませんでした。
しかしpipenvの依存関係にあるパッケージを取りまとめる機能や、インストール時に–devを付与することで開発環境のみにインストールするパッケージを分ける機能があることを知ってからは、pipenvを積極的に使用するようになりました。
pipenvで開発環境構築
pipenvで開発環境を作成
$ pipenv install
pipenvで作った開発環境に入る
$ pipenv shell
基本的にはこれだけです。
pipenvを使用すると、デフォルトでは以下のような位置に開発環境が作成されます。
/Users/username/.local/share/virtualenvs/ProjectName-YMi2nlbO/
usernameとProjectName-****の部分は環境によって変わります。
つまり作成するたびにvenvフォルダはプロジェクトフォルダの外部にある、一定の場所に保存されます。
Pipenvのディレクトリをプロジェクト直下にする
このフォルダの位置を変更するため、PIPENV_VENV_IN_PROJECT=1
という環境変数をmacの標準シェルzshのファイル.zshrc
に追加します。.zshrc
はhomeディレクトリにあります。
$ vi ~/.zshrc
# 以下を追加して保存
export PIPENV_VENV_IN_PROJECT=1
# 確認
$ export -p
# 最後にこれを忘れちゃだめ
$ source ~/.zshrc
これ以降、pipenvを作成すると自動的にプロジェクト直下に.venv
フォルダが追加されるようになります。
おまけ:fish shellで環境変数を保存するには
fishシェルを使って環境変数をexportしようとすると、同じようには出来ないことに気付かされます。その場合は以下のようにして設定できました。
set -Ux PIPENV_VENV_IN_PROJECT 1
set -Ux [環境変数名] [値]でセットするだけ。
以下は環境変数がいつの間にか消える問題を解決してくれたページ。🙇🏻

Pipenv —devで開発用を分離する
pipenv install —dev [package名]
でインストールすると、Pipfileの中の[dev-packages]
という場所にインストールされたパッケージが記入されます。
$ pipenv install django-debug-toolbar --dev
[dev-packages]に書かれたパッケージは、pipenv install
時に—dev
を付与した場合のみインストールされます。
[packages]
django = "*"
[dev-packages]
django-debug-toolbar = "*"
pipenvでパッケージをインストール
$ pipenv install django
pipenvでインストールすると、PipfileやPipfile.lockにパッケージの依存関係やバージョンが保存されるので、開発環境を簡単に再現できるようになります。しかし、pipでも同じようにその環境内にインストールは出来ます。
$ pip install django
この場合、PipfileやPipfile.lockには記入されないので注意が必要です。
pipでインストールしたファイルをpipenvで取り込む
ファイルに書き出し
$ pip freeze > requirements.txt
pipenvに取り込み
$ pipenv install -r ./requirements.txt
これでpipでインストールしていたパッケージもpipenvにまとめることが出来ます。
おわりに
ここまで開発環境をいろいろ考えるようになったのは、Djangoで作ったプロジェクトを実際にデプロイする段階に入ってからのことでした。ただ単にプログラムを動かすだけであればanacondaが一番楽ではないかと思います。
anacondaは初期の開発環境に自動でactivateしてくれます。だから新しく環境を作ることも、環境をactivateすることも知らずに進めることが出来ます。
しかし紆余曲折しながら自分で「開発環境とはなんぞや?」から始まり、ここまでできるようになった過程で学ぶことは多く、shellや環境変数、linuxやターミナルのことがある程度理解できるようになって良かったなと思います。
まだまだ理解できないことがとてつもなく多いプログラミング学習ですが、楽しさも感じつつあるこの頃でした。
コメント