コツコツFIRE日記

ポイ活・投資でFIREを達成するまでの道のりを日記にします!

メモ_pythonの仮想環境

pyenv

pythonのインストールおよび、バージョンの切替えを行う

pyenv-virtualenv

仮想環境の切り替えを行う virtualenv を pyenv といい感じに連携して使えるモジュール

pipenv

  • Pip モジュールに関する構成ファイル(Pipfile, Pipfile.lock)を自動で作成する
  • pip freeze してrequirements.txt を作るという工程をユーザが省ける
  • 仮想環境も作れるので、Pipenv があれば pyenv-virtualenv はいらない。が、pythonのインストールはできないので、pyenv は必要。

python 仮想環境を作る

パターン① pyenv-virtualnv

  1. anyenv で pyenv をインストール
  2. pipenv-virtualenv をインストール
  3. 仮想したい環境に cd コマンドで移動
  4. pyenv virtualenv {{Pythonバージョン}} {{環境名}}で 仮想環境を作成
  5. pyenv local {{環境名}} で環境をセット

★パターン②★ pipenv

① グローバルの Python を使用して pipenv を入れる

$ pip install pipenv

② 仮想化したい環境に入って、pipenv 環境の初期化を行う

$ cd sample
$ pipenv install
$ pipenv install --python 3.7 //python バージョンを指定したいとき

この時、Pipfile があるかないかで動作が分かれる。(なお、同時に Pipfile.lock も作成される) * Pipfile がある→Pipfile の内容を基にパッケージがインストールされる * Pipfile がない→Pipfile が生成される。

③ 仮想環境をアクティベートする

$ pipenv shell

参考: https://takuya-1st.hatenablog.jp/entry/2019/04/14/190547

⑤仮想環境をディアクティベートする

$ deactivate
$ exit //こちらでもOK

Tips

pyenv-virtualenv がなぜ必要なのか?

pyenv だけだと、同じ python バージョンでインストールするモジュールを複数プロジェクトで共有しなくてはいけない。 これを防ぐには、virtualenv で環境の仮想化が重要である。

pipenv vs pyenv-virtualenv

Pipenv の方がパッケージ管理が容易になるので、基本的にはこちらを採用すべき

Pipenvは、virtualenvの仕事に加えて、Pipfileという次世代のパッケージ管理システムを実装したツールである。 by https://qiita.com/KRiver1/items/c1788e616b77a9bad4dd

pipenv の仮想環境名を変更したい

以下リンクを見る限り出来なさそう。たしかにフォルダ名をそのまま踏襲するのが最もシンプル。

https://github.com/pypa/pipenv/issues/1226

トラブルシューティング

ModuleNotFoundError: No module named 'pip._vendor.six'

■ エラー内容

ModuleNotFoundError: No module named 'pip._vendor.six'

I run into this error when I try use a python version other than the system version installed with pyenv https://github.com/pypa/pipenv/issues/4804

■ 解決策

pipenv をアクティベートしたことで解決した。

pipenv をアクティベートしていない状態で、pipenv install を実行したことで、pip モジュールが仮想環境にインストールされていないことが原因だった。