Python を使って開発や実験を行うときは、用途に応じて専用の実行環境を作成し、切り替えて使用するのが一般的です。こういった、一時的に作成する実行環境を、「仮想環境」 と言います。
仮想環境は、次のような目的で使われます。
システム全体で使うPython環境に影響を与えずにモジュールの追加・入れ替えをしたい。
異なるバージョンの Python を使いわけたり、同じモジュールの、複数のバージョンを使い分けたい。
例えば、開発中のWebアプリケーション開発では、Python 3.7 で Webアプリケーションフレームワークとして Django の 1.10 を使い、新しいプロジェクトでは Python 3.8 とDjango バージョン 1.11 を使用したい場合など、簡単に切り替えられるようにしたい。
ここでは、ここでは、Python3 の標準ライブラリである venv で仮想環境を作成する方法を紹介します。
プロジェクトディレクトリの作成¶
まず、開発対象のプロジェクトを格納するディレクトリを作成します。
コマンドプロンプトを開き、次のコマンドでディレクトリ sample1 を作成します。
C:\Users\user1>mkdir sample1
次に、プロジェクトディレクトリに sample.py という名前のソースファイルを作成しましょう。
import requests
print(requests.get("https://www.python.jp").text)
sample.py で使っている requestsモジュール は、Python標準のモジュールではなく、別途インストールしないと使えません。実行するとつぎのようにエラーになります。
C:\Users\user1>cd sample1
C:\Users\user1\sample1>python sample.py
Traceback (most recent call last):
File "sample.py", line 1, in <module>
import requests
ImportError: No module named requests
仮想環境の作成¶
では、最初の仮想環境を作成しましょう。sample1 ディレクトリで、次のコマンドを実行します。
C:\Users\user1\sample1>python -m venv .venv
このコマンドは、指定したディレクトリ C:\Users\user1\sample1\.venv に仮想環境を作成します。仮想環境のディレクトリ名は、.venv 以外でも、好きな名前をつけても大丈夫です。
仮想環境への切り替え¶
Windowsでは、Python を コマンド プロンプトで実行する場合と、PowerShell で実行する場合で、仮想環境の使い方が違います。
コマンド プロンプトでの切り替え¶
作成した仮想環境 .venv ディレクトリにある Scripts\activate.bat を実行します
C:\Users\user1\sapmle1>.venv\Scripts\activate.bat
(.venv) C:\Users\user1\sample1>
コマンド プロンプトの先頭に (.venv) と表示され、仮想環境で実行中であることを示します。
PowerShellでの切り替え¶
仮想環境を利用する前に、PowerShellでスクリプトの実行を許可しておきます。PowerShellを起動し、次のコマンドを実行します。
PS C:\> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
このコマンドは、一番最初に一回だけ実行してください。2回目以降は不要です。
この設定がない場合、つぎのようなエラーが発生する場合があります。
.\venv\Scripts\Activate.ps1 : このシステムではスクリプトの実行が無効になっているため、
ファイル C:\Users\user1\venv\Scripts\Activate.ps1 を読み込むことができません。
詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170)
を参照してください。
発生場所 行:1 文字:1
+ .\venv\Scripts\Activate.ps1
+ ~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
次に、作成した仮想環境 .venv ディレクトリにある Scripts\activate.ps1 を実行します
PS C:\Users\user1\sapmle1> .venv\Scripts\activate.ps1
(.venv) C:\Users\user1\sample1>
コマンド プロンプトの先頭に (.venv) と表示され、仮想環境で実行中であることを示します。
パッケージのインストール¶
仮想環境を使用中に pip モジュールでPyPIからパッケージをインストールすると、仮想環境にインストールされます。sample.py で使っている、requests モジュールをインストールしましょう。
(.venv) C:\Users\user1\sample1>python -m pip install requests
ここで、さきほど作成した sample.py を実行してみましょう。
(.venv) C:\Users\user1\sample1>python sample.py
こんどは、エラー無しで実行できるはずです。
インストールしたモジュールは、仮想環境内にのみ書き込まれ、元の Pythonや、他の仮想環境からは利用できません。
仮想環境のコピー¶
違うPCでも開発したり、複数人のチームで開発したりする時は、どこでも同じ仮想環境を使うようにする必要があります。
この場合、仮想環境(.venv ディレクトリ) をコピーして共有するのではなく、仮想環境にインストールされているパッケージの一覧を作成して、みんなで共有するようにします。
パッケージの一覧は、つぎのコマンドで作成できます。ここでは、requirements.txt というファイルに一覧を作成しています。
(.venv) C:\Users\user1\sample1>python -m pip freeze > requirements.txt
作成した requirements.txt ファイルは、ソースコードと一緒にgitなどに登録して一元管理しましょう。
新しく仮想環境を作成したり、requirements.txt に新しいパッケージを追加したときには、次のコマンドで一括して仮想環境にパッケージをインストールします。
(.venv) C:\Users\user1\sample1>python -m pip install -r requirements.txt
仮想環境の終了¶
仮想環境の使用を終え、通常の状態に復帰するときは、deactivate コマンドを実行します。
(.venv) C:\Users\user1\sample1> deactivate
C:\Users\user1\sample1>
仮想環境を終了すると、もう requests モジュールは使えなくなってしまいます。
C:\Users\testuser1>python sample.py
Traceback (most recent call last):
File "sample.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Pythonを指定した仮想環境¶
複数のバージョンの Python をインストールしている環境では、使用する Python を指定して仮想環境を作成できます。
Windows環境では、Pythonランチャー py.exe がインストールされます。MacOS や Linux などの Unix系OSでは、python コマンドや python3 コマンドで Python を実行しますが、Windowsではこの py.exe が便利です。
Python 3.7とPython 3.8がインストールされた環境で、Python 3.7の仮想環境を作成する場合は、次のように指定します。ここでは、仮想環境をディレクトリ py37env に作成します。
C:\Users\user1>py -3.7 -m venv py37env
ここで作成した py37env を使用すると、python 3.7の仮想環境に切り替わります。
C:\Users\user1>py37env\Scripts\activate.bat
(py37env) C:\Users\user1>python
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
同様に、Python 3.8の仮想環境は、つぎのコマンドで作成できます。
C:\Users\user1>py -3.8 -m venv py38env
この2つの仮想環境を用意しておけば、簡単にPython3.7と3.8を切り替えて使えます。