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

Python開発環境

Pythonで仮想環境を作成する方法はいくつかありますが、本記事ではvenvを使った方法について解説します。
また、下記のようなエラーが出た場合の対処例についても記載しています。

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

参考になれば幸いです。

Pythonの仮想環境いろいろ

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

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

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

venvのインストール

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

仮想環境を作る

Pythonのバージョンを選ぶ

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

この時、自分の環境にインストールされているバージョンからしか選べないことに注意です。
自分の環境に入っていないバージョンで作成したい場合は、インストールしましょう。
<参考記事> Pythonをインストールする方法(Ubuntu)

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

:~$ python3.9 --version
Python 3.9.7

仮想環境を作成する

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

  1. 事前準備(ディレクトリの準備)
  2. mydirディレクトリを作成し、そのディレクトリに移動します。

    # ディレクトリ作成
    :~$ mkdir mydir
    
    # 上記で作成したディレクトリに移動
    :~$ cd mydir
    :~/mydir$
  3. 仮想環境を作成
  4. python3.9 -m venv [仮想環境の名前]コマンドを実行します。
    無事に出来上がると、上記で設定した仮想環境の名前のディレクトリが生成されます。

    :~/mydir$ python3.9 -m venv myenv
    
    # treeコマンドでディレクトリ構成を確認
    :~/mydir$ tree -L 1
    .
    └── myenv

ここでエラーメッセージが出て仮想環境が作れなかった場合はこちらを参照ください。参考になるかもです。

構築した仮想環境に入る

source [仮想環境の名前]/bin/activateコマンドで構築した仮想環境に入ることが出来ます。
コマンドラインの先頭にカッコで仮想環境名が表示されればOKです。

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

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

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

試しにライブラリがどんなものが入っているか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

インストール済なのにこのエラーメッセージが出る場合は下記のように–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をダウンロード
  2. (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 
  3. get-pip.pyスクリプトを実行
  4. (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
  5. いったん仮想環境を抜けます
  6. (py37) :~/projects$ deactivate
  7. 再度仮想環境に入ります
  8. :~/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: Ubuntu16.04LTS, Ubuntu18.04LTS, Ubuntu20.04LTS

まとめ

今回は、venvを使った仮想環境の構築および入り方・抜け方についてまとめました。また、エラーメッセージが出た時の対処法の一つも合わせて記載いました。同様のエラーで悩んでいる人の助けになればと思います。

参考書籍

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

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