##仮想環境とは
仮想環境とは、WEBアプリなどをオンラインにアップロードする際に、オンラインにアップロードする必要なファイルをまとめておく環境である。ローカル(ノートパソコンなど)でアプリを開発していると、パソコン自体にインストールされているPythonライブラリを読み取ってしまう。
###仮想環境を構築していないとオンラインにアップロードしたときにアプリが動かない恐れがある
例えばアプリでPillowライブラリ(PIL)を使うことを考えてみる。まずパソコンにpip install Pillow
でPillowをインストールする。アプリではfrom PIL import Image
と記述してライブラリからコマンドインポートする。この場合アプリはパソコン上のPillowライブラリ読み取って動くことになる。ローカルのみでアプリを実行する場合には問題ないが、オンラインにアプリをアップロードする場合に問題が発生する。
##オンラインサーバーにはpythonライブラリがインストールされていない
オンラインにアプリをアップロードということは、ローカルで作成したアプリのファイルをオンラインサーバーに移動するということである。ここで問題なのはオンラインサーバーにはpythonライブラが入っていないということである。そのためアプリのフォルダに入っているファイルだけをサーバーにアップロードしても、アプリは必要なpythonライブラリを読み取ることができず動かなくなる。上記の例ではfrom PIL import Image
で、「PILライブラリが見つかりません」といったエラーが発生することになる。
##仮想環境を構築してアプリに必要なライブラリをアプリと同じフォルダに格納する
仮想環境を構築する目的は、オンラインサーバが必要なライブラリを読み取ってインストールするための「ライブラリリスト」を作成することである。
###仮想環境の作り方
#####1. 「プロジェクトのフォルダ内」でコマンドプロンプトを起動し([コマンドプロンプトを指定のフォルダで素早く起動][link]を参照)、python -m venv env
と入力する。
__プロジェクトのフォルダ内__というのは、Flaskアプリであればapplication.py
と同じレベル、Djangoアプリであればmanage.py
と同じレベルである。そのため仮想環境を構築する前にプロジェクトフォルダを作成(django-admin startproject test
など)している必要がある。
一番最後の「env」は任意の文字でいいが、仮想環境には同じ名前を使った方が後々都合がよい。使い回しするファイル(.gitignoreなど)を作成する時に同じ名前であると書き換えしなくてもいいからだ。
そうすると仮想環境のフォルダが作成される。写真の例は「test」フォルダ内でコマンドプロンプトを立ち上げ、上のコマンドを入力したもの。
#####2. コマンドプロンプト(PowerShellではできない)でenv\Scripts\activate.bat
と入力する。
写真のように入力する。「円マーク(¥)」は日本語キーボードの「バックスペースキー」の左側隣のキー。
すると、次のような画面になる。左側(env)とあると現在「env」という仮想環境上にいることを示している。
#####3. 必要なライブラリをインストールする。
例えば、DjangoアプリのときはDjangoを仮想環境にインストールする必要がある。pip install django
と入力する。次に別のライブラリもインストールしていく(pip install Pillow
)など。
###オンラインサーバーが読み取るためのライブラリリストを作成する
オンラインサーバーでは「ライブラリリスト」を読み込んで、記述されているライブラリがインストールされる。このライブラリリストは「requirements.txt」というファイルになる。仮想環境上で、次のコマンドを入力してライブラリリストのファイルを作成する
pip freeze > requirements.txt
すると、フォルダ内にファイルが作成される。
ファイルを開くと、インストールしたライブラリのリストが記入されている。
Django==2.2.3
Pillow==6.0.0
pytz==2019.1
sqlparse==0.3.0
後は、仮想環境上で作業を進めていけばいい。新しくライブラリをインストールした場合、上記の方法でrequirements.txt
を上書き修正する。この際、requirements.txt
を直接編集しないこと。理由はわからないが、オンラインサーバーが読み取ってくれなくなる。
質問はコメント欄でお願いします。できるだけ調べて回答します。
[link]:https://qiita.com/Wanicosan/items/b9380a26af3caa7d7518