メモ_pythonの仮想環境
pyenv
pythonのインストールおよび、バージョンの切替えを行う
pyenv-virtualenv
仮想環境の切り替えを行う virtualenv を pyenv といい感じに連携して使えるモジュール
pipenv
- Pip モジュールに関する構成ファイル(Pipfile, Pipfile.lock)を自動で作成する
- pip freeze してrequirements.txt を作るという工程をユーザが省ける
- 仮想環境も作れるので、Pipenv があれば pyenv-virtualenv はいらない。が、pythonのインストールはできないので、pyenv は必要。
python 仮想環境を作る
パターン① pyenv-virtualnv
- anyenv で pyenv をインストール
- pipenv-virtualenv をインストール
- 仮想したい環境に cd コマンドで移動
pyenv virtualenv {{Pythonバージョン}} {{環境名}}で
仮想環境を作成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 モジュールが仮想環境にインストールされていないことが原因だった。