はじめに
pyenvとpipenvを使った仮想環境管理環境(?)を作る.
Python自体のバージョン管理をpyenvで行い, プロジェクト毎の仮想環境の構築やパッケージ管理をpipenvで行うようにする.
環境
- Ubuntu 18.04
-
apt install
が使える
インストール
#!/bin/bash
# Install dependencies
echo "ユーザのパスワード" | sudo apt update && sudo apt install -y --no-install-recommends \
build-essential \
libffi-dev \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
git
# Download pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# Update .bash_profile
touch ~/.bash_profile
echo -e "# pyenv paths" >> ~/.bash_profile
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
pyenv -v
# Install Python and set default
pyenv install 3.7.4
pyenv global 3.7.4
# Install pipenv
pip install pipenv
このシェルスクリプトを次のように実行することで, pyenv/python/pipenvのインストールが行われる.
./install.sh
権限が無いと怒られたら, chmod +rx install.sh
で読み取り・実行権限を与える.
勿論一行一行ターミナルに打って実行しても問題ない.
使い方
hogeというプロジェクトを作り, Python3.6の仮想環境を立ち上げてみる.
まずpyenvで3.6バージョンのPythonをインストール.
$ pyenv install 3.6.9
続いてpipenvで仮想環境を作る.
$ mkdir hoge
$ cd hoge
$ pipenv install --python 3.6.9
Creating a virtualenv for this project…
Pipfile: /home/**/hoge/Pipfile
Using /home/**/.pyenv/versions/3.6.9/bin/python3 (3.6.9) to create virtualenv…
pyenvでインストールしたPython3.6.9が使われている.
hoge/
下にPipfile
とPipfile.lock
があれば成功.
- 仮想環境の有効化
$ pipenv shell
(hoge) user:~/hoge$
- 仮想環境にライブラリをインストール
$ pipenv install numpy
pip install
の代わりにpipenv install
を使う. 間違ってpip install
しても仮想環境外を汚すことは無いが, そのライブラリは Pipfile/Pipfile.lock
で管理されないので気をつける.
- 仮想環境から抜ける
$ exit
- 仮想環境の削除
$ pipenv --rm
いいところ
- インストールが簡単&構成が分かりやすい
- pipenvでライブラリをインストールすると
Pipfile/Pipfile.lock
も自動更新されるので, requirements.txtと違って更新忘れが無い- gitとの相性もいい
-
pipenv install -r requirements.txt
でrequirements.txt
からパッケージ管理を引き継げる
わるいところ
- 仮想環境の有効/無効化が面倒くさい. 使用感はvirtualenvと近いかも.
- 間違えて
pip install
しそうになる. -
Pipfile.lock
の作成に時間がかかる
おまけ:仮想環境の置き場所
デフォルトでは, pipenvで作成した仮想環境は~/.local/share/virtualenvs/
以下に置かれる. pipenv --rm
を行うとこの仮想環境が削除されるのであるが, それを忘れてプロジェクトディレクトリだけ削除すると仮想環境自体は残り続ける.
プロジェクト直下に仮想環境を作るには, 環境変数$PIPENV_VENV_IN_PROJECT
を定義する必要がある.
echo -e "# pipenv property" >> ~/.bash_profile
echo 'export PIPENV_VENV_IN_PROJECT=1' >> ~/.bash_profile
source ~/.bash_profile
こうするとプロジェクト直下に仮想環境.venv/
が置かれるようになり, プロジェクトディレクトリを削除すれば一緒に仮想環境も削除される.