2019年3月19日火曜日

RaspberryPiにpyenv、pyenv-virtualenvをインストールしPython仮想環境をつくる


ラズパイでPython開発環境を整えるにあたってpyenvとそのプラグインであるpyenv-virtualenvをインストールしました。ただPythonを勉強するだけなら始めのうちは仮想環境を作成する必要はないそうです。ラズパイで書けるようなレベルのPythonでは仮想環境の作成を行う必要性はかなり低そうです。ラズパイならSDごと書き換えなおせばいいですしね。しかし僕は形から入るタイプの人間なので仮想環境も作成できるようにしておきました。

Python環境の構築、とくに仮想環境系のことについて調べていると、pyenvvenvなどを混同するような説明が多くどれを選べばよいのかよくわからなくなりました。


調べてわかったことを簡単にまとめます。(間違ってたらごめんなさい)ここでいう環境はsite-packagespipでインストールされるライブラリなどのことです。
venv:環境を個々に作成し管理できるツール。バージョンによってはPythonをインストールすると自動でこのツールが付いている。
virtualenvvenvと同様な機能を持つツール。
pyenv:環境をPythonのバージョンごとで管理可能なツール。これを使えば複数バージョンのPythonをインストール可能。
pyenv-virtualenvpyenvのプラグイン。pyenvvenvvirtualenvのような環境管理機能を追加できる。


pyenvをインストール

まずはpyenv動作に必要なパッケージをインストールします。
$ sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

git cloneコマンドでgithub上にあるpyenvをダウンロードします。
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

ホームディレクトリの.profileの内容にnanovi等のテキストエディタで以下の記述を追加します。
#pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

sourceコマンドで設定を反映します。
$ source ~/.profile
これでpyenvコマンドが使えるようになりました。インストール可能なPythonのバージョンを確認してみます。
$ pyenv install –list


Python最新安定バージョンをpyenvでインストール

pyenvをインストールしたのでPythonの各バージョンごとに環境をわけることができるようになりました。現在最新の安定板であるPython3.7.2をインストールしてみます。

まずは、Python3.7系にはlibffi-devが必要らしいのでインストールします。
$ sudo apt-get install libffi-dev

libffi-devがインストールできたらpyenvコマンドでPython3.7.2をインストールします。回線速度にもよると思いますが僕は14分位で終わりました。
$ pyenv install 3.7.2

pyenv globalPython3.7.2に切り替えてみます。このコマンドではglobalつまりどのディレクトリにいてもこのコマンドで指定したPythonのバージョンが適用されます。
$ pyenv global 3.7.2
これでPythonのバージョンが切り替わりました。バージョンを確認してみます。
 $ python –V

電源を落としてもpyenvで設定したバージョンが適用されます。
Pythonをシステムのデフォルトのものに戻したいときは以下のコマンドで戻せます。
$ pyenv global system


pyenv環境のpipをアップグレードする

pyenv3.7.2に切り替え後のpipバージョンを確認してみます。
$ python -m pip –V
pipのバージョンは18.1のようです。

pyenvで新たにインストールしたバージョンのPythonpipをアップグレードします。
pipコマンドで直接アップグレードするとシステムのデフォルトPythonpipがアップグレードされてしまいます。そのためpythonコマンドからpipをアップグレードします。
pyenvpipをアップグレードしたいPythonバージョンに変更した後、以下コマンドを実行します。
$ python -m pip install --upgrade pip
pipのバージョンを最新の19.0.3にアップグレードできました。

ちなみに以下コマンドでpipをバージョンアップすると、pyenvでバージョンを切り替えていてもシステムのデフォルトPythonpipがアップグレードされてしまいます。
$ sudo pip install --upgrade pip

 pyenv-virtualenvをインストール

pyenv-virtualenvpyenvのプラグインになります。
pyenvでは各Pythonバージョン単位で環境が管理されているため、pipで追加したパッケージ等も各Pythonバージョンごとに管理されています。しかしpyenv-virtualenvをインストールすることで、同Pythonバージョンでも別環境を作成できるようになり、同Pythonバージョンでもpipで追加したパッケージ等を別環境で管理することが可能になります。

git cloneコマンドでpyenv-virtualenvをダウンロードします。
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

ホームディレクトリの.profileの内容にnanovi等のテキストエディタで以下の記述を追加します。
eval "$(pyenv virtualenv-init -)"

これでpyenv-virtualenvが使えるようになりました。
ためしにtestという名前の環境を作成してみます。
pyenv virtualenv バージョン名 環境名 で作成できます。作成完了までには1分位かかりました。
$ pyenv virtualenv 3.7.2 test

以下コマンドでpyenvで作成された環境を確認すると、バージョンごとの環境のほかに先ほど作成したtestという環境が作成されています。
$ pyenv versions

pyenv localで作成したtestという環境に切り替えます。このコマンドを使うとユーザー名の横に(環境名)が表示されるようになります。localなのでこのコマンドを実行したディレクトリ内でだけこの仮想環境が適用されます。
$ pyenv local test

仮想環境の適用を解除したければ、pyenv local systemでシステムのデフォルト環境に戻ります。
$ pyenv local system

作った環境を削除したければpyenv uninstall 環境名 で削除できます。pyenv-virtualenv: remove /home/pi/.pyenv/versions/バージョン名/envs/環境名? と表示されたら、yと入力しエンターを押せば削除が実行されます。
$ pyenv uninstall test
pyenv versionsで環境が削除されているのが確認できます。


覚えておきたいコマンドまとめ

pyenvでPythonのインストール
$ pyenv install バージョン

仮想環境の作成
$ pyenv virtualenv バージョン 環境名

現在のディレクトリに仮想環境を適用
$ pyenv local 環境名もしくはバージョン

全体に仮想環境を適用
$ pyenv global 環境名もしくはバージョン

システムの環境に戻す
$ pyenv localもしくはglobal system

0 件のコメント:

コメントを投稿