本ページはプロモーションが含まれています

【Python】venvを使った仮想環境の作り方

Python開発環境

本記事では、venvを使った仮想環境を作成する方法について解説します。
また、筆者がこれまでに体験した下記のようなエラーの対処例についても紹介します。

  • python3-devが無いというエラーが出てvenvで仮想環境を作れない
  • 作った仮想環境にpipでライブラリがインストールできない

スポンサーリンク

Pythonの仮想環境いろいろ

Pythonで想環境を作るには、下記の通りいくつかあります。

これらのうち、本記事ではvenvを使った方法について解説します。

(参考)公式リファレンス: venv — 仮想環境の作成

標準組込みモジュールなので新規インストールは不要

venvはPythonの仮想環境作成のためにPython 3.3 から標準に組み込まれたモジュールです。
Python 3.3以降であれば、新たにインストールは必要ありません。

どのPythonのバージョンで仮想環境を作るか?

まず、どのバージョンのPythonで仮想環境を作るか決めます。

この時、自分の環境にインストールされているバージョンからしか選べないことに注意です。
自分の環境に入っていないバージョンで作成したい場合は、インストールしましょう。

今回は、Python3.11.2での作成を例にします。

$ python3.11 --version
Python 3.11.2

仮想環境の作りかた

以下の例では、mydirというディレクトリにmyenvという名前の仮想環境を作ります。

事前準備(ディレクトリの準備)

まず、mydirディレクトリを作成し、そのディレクトリに移動します。

# ディレクトリ作成
$ mkdir mydir

# 上記で作成したディレクトリに移動
$ cd mydir
~/mydir$

仮想環境を作成する

Terminal上でvenvコマンドを実行すると仮想環境が作成されます。

pythonX.XX -m venv [仮想環境の名前]

※上記のpythonX.XXの箇所は作成するPythonのバージョンを指定

以下は、myenvという名前の仮想環境をPython3.11で作成した場合の例です。

~/mydir$ python3.11 -m venv myenv

# treeコマンドでディレクトリ構成を確認
~/mydir$ tree -L 1
.
└── myenv
(参考)ここで筆者が遭遇したエラーの対処例をこちらで紹介しています。

作成した仮想環境を有効化(アクティベート)する

作成した仮想環境を有効化するには、下記コマンドを使います。

source [仮想環境の名前]/bin/activate

具体例を以下に示します。
コマンドラインの先頭にカッコで仮想環境名が表示されればOKです。(今回の例ではmyenv

~/mydir$ source myenv/bin/activate
(myenv) :~/mydir$ 

Pythonのバージョンを確認すると、設定した通りPython3.11.2が立ち上がりました。

(myenv) :~/mydir$ python --version
Python 3.11.2

試しにライブラリがどんなものが入っているかpip freezeコマンドで確認してみます。

(myenv) :~/mydir$ pip freeze
(myenv) :~/mydir$ 

新しく環境を構築したので、当然ですが何も入っていません。
試しにscheduleモジュールを入れてみます。

(myenv) :~/mydir$ pip install schedule
Collecting schedule
    Using cached schedule-1.1.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: schedule
Successfully installed schedule-1.1.0

再度pip freezeで確認すると、ライブラリがインストールされていることがわかります。

(myenv) :~/mydir$ pip freeze
schedule==1.1.0

あとは自分の開発に合わせてライブラリを入れていけばOK。

仮想環境を無効化(ディアクティベート)する

deactivateコマンドで仮想環境を無効化(ディアクティベート)することが出来ます。
具体例は以下です。

(myenv) :~/mydir$ deactivate
:~/mydir$ 

(参考)venvコマンドでエラーが発生した場合の対処例

venvコマンドで環境を作成する際に下記のようなエラーが出た場合の対処例を紹介します。

:~/projects$ python3.7 -m venv py37
  The virtual environment was not created successfully because ensurepip is not
  available.  On Debian/Ubuntu systems, you need to install the python3-venv
  package using the following command.
  
      apt-get install python3-venv
  
  You may need to use sudo with that command.  After installing the python3-venv
  package, recreate your virtual environment.
  
  Failing command: ['/home/hibikisan/projects/py37/bin/python3.7', '-Im', 'ensurepip', '--upgrade', '--default-pip']

まずは、言われたとおりにpython3-venvをインストールして再トライ。

:~/projects$ sudo apt install python3-venv

python3-venvのインストール後なのに同じエラーが出る場合は、下記のように–without-pipオプションを使うと仮想環境の作成に成功しました。

:~/projects$ python3.7 -m venv --without-pip venv

# 仮想環境venvのフォルダが作成されたことが確認できます
hibikisan@hibiki2019:~/projects$ ls -la
total 12
drwxrwxr-x 3 hibikisan hibikisan 4096 Aug 29 00:01 .
drwxrwxr-x 4 hibikisan hibikisan 4096 Aug 28 23:58 ..
drwxrwxr-x 5 hibikisan hibikisan 4096 Aug 29 00:01 venv

但し、この場合pip installしてもライブラリが意図した仮想環境にインストールされません
pipのパスが作成した仮想環境ではなくベース環境のパスとなっている為で、この状態でpip installしてもベース環境に組み込まれてしまいます。

# pythonのパス
(py37) :~/projects$ which python
/home/hibikisan/projects/py37/bin/python

# pipのパス
(py37) :~/projects$ which pip
/home/hibikisan/.local/bin/pip

この場合は、下記の手順でpipを仮想環境のディレクトリにインストールします。

(1) get-pip.pyをダウンロード

(py37) :~/projects$ curl -O https://bootstrap.pypa.io/get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
100 1733k  100 1733k    0     0  45.7M      0 --:--:-- --:--:-- --:--:-- 45.7M 

(2) get-pip.pyスクリプトを実行

(py37) :~/projects$ python get-pip.py
Collecting pip
    :
    :
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-19.2.3 setuptools-41.2.0 wheel-0.33.6

(3) いったん仮想環境を抜けます

(py37) :~/projects$ deactivate

(4) 再度仮想環境に入ります

:~/projects$ source py37/bin/activate

pipのパスを確認。今度は仮想環境へのパスになっています。

(py37) :~/projects$ which pip
/home/hibikisan/projects/py37/bin/pip

pip freezeでインストールされているライブラリを確認。まだ何も入れていないので、何も入っていません。

(py37) :~/projects$ pip freeze

試しにnumpyを入れてみます。

(py37) :~/projects$ pip install numpy
Collecting numpy
   :
   :
Installing collected packages: numpy
Successfully installed numpy-1.17.2

pipインストールしたライブラリを仮想環境内で無事使えることを確認しました。

(py37) :~/projects$ python
Python 3.7.3 (default, Apr  3 2019, 19:16:38) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy 
>>> numpy.__version__
'1.17.2'

環境

  • OS: Ubuntu20.04LTS
  • Python: Python 3.11.2

 

参考書籍

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする