3
5

More than 5 years have passed since last update.

仮想環境とは

Last updated at Posted at 2019-07-02

仮想環境とは

仮想環境とは、WEBアプリなどをオンラインにアップロードする際に、オンラインにアップロードする必要なファイルをまとめておく環境である。ローカル(ノートパソコンなど)でアプリを開発していると、パソコン自体にインストールされているPythonライブラリを読み取ってしまう。

仮想環境を構築していないとオンラインにアップロードしたときにアプリが動かない恐れがある

例えばアプリでPillowライブラリ(PIL)を使うことを考えてみる。まずパソコンにpip install PillowでPillowをインストールする。アプリではfrom PIL import Image と記述してライブラリからコマンドインポートする。この場合アプリはパソコン上のPillowライブラリ読み取って動くことになる。ローカルのみでアプリを実行する場合には問題ないが、オンラインにアプリをアップロードする場合に問題が発生する。

オンラインサーバーにはpythonライブラリがインストールされていない

オンラインにアプリをアップロードということは、ローカルで作成したアプリのファイルをオンラインサーバーに移動するということである。ここで問題なのはオンラインサーバーにはpythonライブラが入っていないということである。そのためアプリのフォルダに入っているファイルだけをサーバーにアップロードしても、アプリは必要なpythonライブラリを読み取ることができず動かなくなる。上記の例ではfrom PIL import Imageで、「PILライブラリが見つかりません」といったエラーが発生することになる。

仮想環境を構築してアプリに必要なライブラリをアプリと同じフォルダに格納する

仮想環境を構築する目的は、オンラインサーバが必要なライブラリを読み取ってインストールするための「ライブラリリスト」を作成することである。

仮想環境の作り方

1. 「プロジェクトのフォルダ内」でコマンドプロンプトを起動し(コマンドプロンプトを指定のフォルダで素早く起動を参照)、python -m venv env と入力する。

プロジェクトのフォルダ内というのは、Flaskアプリであればapplication.pyと同じレベル、Djangoアプリであればmanage.pyと同じレベルである。そのため仮想環境を構築する前にプロジェクトフォルダを作成(django-admin startproject testなど)している必要がある。
一番最後の「env」は任意の文字でいいが、仮想環境には同じ名前を使った方が後々都合がよい。使い回しするファイル(.gitignoreなど)を作成する時に同じ名前であると書き換えしなくてもいいからだ。
そうすると仮想環境のフォルダが作成される。写真の例は「test」フォルダ内でコマンドプロンプトを立ち上げ、上のコマンドを入力したもの。

スクリーンショット 2019-07-02 21.13.03.png

2. コマンドプロンプト(PowerShellではできない)でenv\Scripts\activate.bat と入力する。

写真のように入力する。「円マーク(¥)」は日本語キーボードの「バックスペースキー」の左側隣のキー。
スクリーンショット 2019-07-02 21.35.20.png
すると、次のような画面になる。左側(env)とあると現在「env」という仮想環境上にいることを示している。
スクリーンショット 2019-07-02 21.35.24.png

3. 必要なライブラリをインストールする。

例えば、DjangoアプリのときはDjangoを仮想環境にインストールする必要がある。pip install djangoと入力する。次に別のライブラリもインストールしていく(pip install Pillow)など。

オンラインサーバーが読み取るためのライブラリリストを作成する

オンラインサーバーでは「ライブラリリスト」を読み込んで、記述されているライブラリがインストールされる。このライブラリリストは「requirements.txt」というファイルになる。仮想環境上で、次のコマンドを入力してライブラリリストのファイルを作成する
pip freeze > requirements.txt
すると、フォルダ内にファイルが作成される。
スクリーンショット 2019-07-02 21.54.05.png

ファイルを開くと、インストールしたライブラリのリストが記入されている。

Django==2.2.3
Pillow==6.0.0
pytz==2019.1
sqlparse==0.3.0

後は、仮想環境上で作業を進めていけばいい。新しくライブラリをインストールした場合、上記の方法でrequirements.txtを上書き修正する。この際、requirements.txtを直接編集しないこと。理由はわからないが、オンラインサーバーが読み取ってくれなくなる。

質問はコメント欄でお願いします。できるだけ調べて回答します。

3
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5