pyenv-virtualenvはインストールしない!Python3.6に仮想環境を作るときの注意点(2018年最新版)
この記事を読んでいるということは、おそらくPythonの環境設定に悩んでいるか、他のサイトを巡回して言っていることがバラバラで何がどうなっているか混乱していると思います。Python3.6の仮想環境を作るときのポイントをまとめたのでチェックしてください。
cd /usr/local/etc
- インストールは細心の注意を払う
- 安易にpipを使わない
- 便利ツール(Anacondaなど)は使わない
- グローバルにインストールしてもいいのはPython3.6のみ(後で詳細を述べる)
- pyenvとvirtualenvは違う。混同している記事に気をつけること!
- 仮想環境はvenvを使う。それ以外は禁止
- 仮想環境(venv)の中でpipインストール
- 仮想環境ディレクトリはユーザーディレクトリの中に入れる
- 仮想環境ディレクトリとプロジェクトディレクトリは完全に分ける
Pythonと各種パッケージをインストールする前
仮想環境を作らなくてもいいという考えは間違っています。開発しているマシンもサーバーも仮想環境を作らなければいけない。
仮想環境を作るということは、OS全体に影響するようなところに各種ライブラリをインストールすることをしないということ。つまりpipでインストールするものは特定のディレクトリにすべておさめる。
しかし仮想環境を作るにあたってPython本体とpipは必要になります。Pythonの開発を始めるときの最初のインストールは次のようになります。
sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install python36u
sudo yum install python36u-pip
sudo yum install python36u-devel
一行目はおなじみのリポジトリ。インストールを指定するものは事実上3つのみです。python36uはインストールしようとするとpython36u-libsを依存関係で同時にインストールします。またpython36u-pipも依存関係でpython36u-setuptoolsを同時にインストールします。
上のコマンドをまとめて記述している解説記事もありますが、最初は一つ一つ丁寧にインストールすることを強く勧めます。まとめてインストールしたり、便利ツールを使ったりすると、自分が何をしているかだんだんわからなくなっていくのです。
上の3つのコマンドを入力することで次の5つがインストールされることになります。
python36u
python36u-libs
python36u-pip
python36u-setuptools
python36u-devel
このように細かく見ていくと、今までなんとなくいろいろなものをインストールしていた方は、混乱の糸がほぐれていくような気がするでしょう。この5つがいわゆるPythonのコアであり、他のパッケージは仮想環境に入れて分離するようにしましょう。
仮想環境はvenvで作る
他のPython系のライブラリはすべて仮想環境のディレクトリに入れます。仮想環境のディレクトリはユーザーディレクトリの中に入れます。
/home/yourname/venv
yournameは一般ユーザーの名前です。ユーザーディレクトリの中にvenvというディレクトリを作り、それを仮想環境としてDjangoなどをインストールしてください。
仮想環境ディレクトリのvenvは、cdでyournameに移動してから次のコマンドを入力して作ります。
python3.6 -m venv venv
venvが2個続いていますが、1つ目はPython3.6に入っているコマンド、2つ目はvenvという名前のディレクトリ。作ったばかりのvenvディレクトリをlsでくわしく見てみましょう。
bin include lib lib64 pip-selfcheck.json pyvenv.cfg
venvの直下にlib64というディレクトリがあります。この中に
python3.6
というディレクトリがあります。このpython3.6の中はどうなっているでしょうか?
site-packages
というディレクトリが出てきました。もうわかってきたと思います。これから仮想環境でインストールするパッケージはここに収まっていくのです。仮想環境でDjangoをインストールすると、site-packagesは次のディレクトリやファイルを持つようになります。
Django-2.0.3.dist-info easy_install.py pkg_resources setuptools
__pycache__ pip pytz setuptools-28.8.0.dist-info
django pip-9.0.2.dist-info pytz-2018.3.dist-info
pipでインストールするときは
pip install django
と入力しますが、これだけだとグローバルにインストールされてしまいます。仮想環境というローカルにDjangoを閉じこめてインストールするには、Djangoをインストールする前に、cdでvenvに移動し
source bin/activate
とコマンドを打ってください。venvという仮想環境ディレクトリがbinとlib64を持っていたことを上のリストを見て思いだしましょう。このbinにactivateというファイルがあります。source bin/activateとすることで、venvが仮想環境になります。
activateすると、これからのインストールはすべて仮想環境の内部で行われ、外部にまったく影響しないようになります。ユーザーの左に(venv)という名前がつくようになります。
(venv) [***]$ pip -V
↑はpipのバージョンを確認するコマンドです。
pip 9.0.1 from /home/yourname/venv/lib64/python3.6/site-packages (python 3.6)
仮想環境を使ったらpipをアップデートします。pip install --upgrade pipと入力して仮想環境内のpipのバージョンを上げましょう。
(venv) [***]$ pip install --upgrade pip
インストールが完了したら再びバージョンを確認します。
(venv) [***]$ pip -V
pip 9.0.1 from /home/yourname/venv/lib64/python3.6/site-packages (python 3.6)
なおpipはpipでもpip3でも同じです。
仮想環境とプロジェクトディレクトリ
仮想環境は作っては消してをくりかえすという前提のディレクトリです。もしプロジェクトが仮想環境の中にあったらどうでしょうか? プロジェクトをいちいち外にコピーして仮想環境を破壊するのでしょうか?
あるいはプロジェクトの中に仮想環境を作るというのはどうでしょうか? これは同じ仮想環境を使って複数のプロジェクトを作るような場面に適しませんね。
以上から、仮想環境とプロジェクトは完全に分けるようにしましょう。そしてプロジェクトは仮想環境がどこにあり、どんなパッケージを持っているかという小さい情報だけを持つようにします。
/home/yourname/venv
/home/yourname/abcproject
/home/yourname/mathcalcproject
︙
pyenvとvirtualenv
pyenvとvirtualenvの話は書きたいことが山のようにありますが、今日はこのあたりで。時間があるときに追記を書きます。