Ubuntu上で汎用的に使えるPython開発環境の構築方法を紹介します.
検証環境
Vagrant でクリーンな VM を立て,その中で検証しました.
目標
目標はシステム領域を汚さない開発環境の構築です.具体的には次のツールを導入することで実現します.
- Python3: apt でシステムに導入
- pipsi: apt でシステムに導入
- pipenv: pipsi でユーザー領域に導入
- pyenv: setup script でユーザー領域に導入
環境構築
pipsi の導入
まずはシステムの Python3 と Python の CLI ツールをユーザー領域にインストールできる pipsi を導入します.
sudo apt install -y python3 pipsi
この段階では pipsi は動きません.pipsi は virtualenv コマンドに依存しているので,一時的に Python の仮想環境を作成してその中で virtualenv をインストールして virtualenv コマンドが存在する状態を作ります.この状態では pipsi が動くので pipsi で virtualenv をインストールすることでシステムと隔離された領域に virtualenv をインストールします.最後に仮想環境から脱出し,この仮想環境はもう必要がないので削除します.
python3 /usr/lib/python3/dist-packages/virtualenv.py --python=python3 pytmp # 一時的な仮想環境を作成 cd pytmp # 仮想環境のディレクトリに入る . ./bin/activate # 仮想環境の有効化 pip install virtualenv # 仮想環境内に virtualenv をインストール (これがないと pipsi が動かない) pipsi install virtualenv # pipsi に virtualenv をインストール (仮想環境内に virtualenv があるから動く) deactivate # 仮想環境の非活性化 cd ../ # 仮想環境のディレクトリから出る rm -rf pytmp # 不要になった仮想環境を削除する
pipsi でインストールされたコマンドは ~/.local/bin/
に配置されるので PATH を設定します.
# ~/.profile に下記行を追加する export PATH="$HOME/.local/bin:$PATH"
以上で pipsi を利用できるようになりました.
pipenv の導入
次は pipenv とその依存コマンドの pew を pipsi を使って導入します.
pipsi install pipenv pipsi install pew
pipsi でインストールされたパッケージの一覧は次のようにして確認できます.
$ pipsi list Packages and scripts installed through pipsi: Package "pew": pew Package "pipenv": pipenv-resolver pipenv Package "virtualenv": virtualenv
pipenv がうまく動いているか確認します.
mkdir pywork # 作業用ディレクトリの作成 mv pywork # 作業用ディレクトリへ移動 pipenv --python 3 # pipenv 環境の初期化 pipenv install requests # package がインストール出来ることの確認
上記コマンドが問題なく機能すれば Pipenv は正常にインストールできています.利便性のために pipenv の bash 補完の設定をしておきます.pipenv --completion
を評価すれば良いですが,このコマンドは実行が若干重いので必要なときまで遅延するのがおすすめです.
function _pipenv_completion () { unset -f _pipenv_completion complete -r pipenv eval "$(pipenv --completion)" && return 124 } complete -F _pipenv_completion pipenv
pyenv の導入
最後に pyenv を導入します.Pipenv は仮想環境を作成する際に Python のバージョンの指定が出来ますが,そのときにインストールされていないバージョンは pyenv を利用して自動的に導入してくれるので併用をおすすめします.
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash # pyenv のインストール
~/.profile
に次の内容を追加して . ~/.profile
で再読込すれば完了です.
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
念の為に更新をしておきます.
pyenv update
pyenv が Python をソースコードからビルドするときに必要となるパッケージをインストールすれば環境構築は完了です.
sudo apt install -y make build-essential zlib1g-dev libssl-dev libsqlite3-dev libreadline-dev libgdbm-dev libncurses5-dev libbz2-dev liblzma-dev tk-dev
動作確認
pipenv と pyenv の連携が上手く動いているか確認します.Pipenv で仮想環境を作成する際に,現在入っていない Python のバージョンを指定したとき,pyenv がそのバージョンの Python を自動的にインストールして使ってくれれば成功です.
pyenv でインストールされている Python のバージョンを確認しておきます.現状何も入っていないので出力はされないはずです.
pyenv versions
適当なディレクトリを作って pipenv を用いて仮想環境を作ってみましょう.今回はインストールされていない 3.7.1 を指定してみます.
mkdir mypjc cd mypjc pipenv --python 3.7.1
正常に終われば成功です.pyenv 管理下でインストールされているか確認できます.
pyenv versions > 3.7.1
まとめ
今回はシステムを全く汚さない形で Python の開発環境を構築しました.システムには pip 自体が入っていないので間違えてシステムの pip コマンドを発行してグローバルにパッケージをインストールしてしまうこともありません.Ubuntu 18.04 になってからは pipsi を apt でインストール出来るようになったので敷居が低くなったと思います.日頃からシステムを汚さないように心がけることで「いつの間にか環境に不整合が起きていた」といった状況を予防することができます.ぜひ当記事の方法で安定した Python 環境を構築してガンガン開発していって下さい.