本記事では、venvを使った仮想環境を作成する方法について解説します。
また、筆者がこれまでに体験した下記のようなエラーの対処例についても紹介します。
- python3-devが無いというエラーが出てvenvで仮想環境を作れない
- 作った仮想環境にpipでライブラリがインストールできない
Pythonの仮想環境いろいろ
Pythonで想環境を作るには、下記の通りいくつかあります。
- virtualenv
- venv
- Anaconda
- docker など…
これらのうち、本記事では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