Pythonで仮想環境を作成する方法はいくつかありますが、本記事ではvenvを使った方法について解説します。
また、下記のようなエラーが出た場合の対処例についても記載しています。
- python3-devが無いというエラーが出てvenvで仮想環境を作れない
- 作った仮想環境にpipでライブラリがインストールできない
参考になれば幸いです。
Pythonの仮想環境いろいろ
Pythonで想環境を作るには、下記の通りいくつかあります。
- virtualenv
- venv
- Anaconda
- docker など…
これらのうち、本記事ではvenvを使った方法について解説します。
(参考)公式リファレンス: venv — 仮想環境の作成
venvのインストール
venvはPythonの仮想環境作成のためにPython 3.3 から標準に組み込まれたモジュールです。標準組込みなので、新たにインストールは必要ありません。
仮想環境を作る
Pythonのバージョンを選ぶ
まず、どのバージョンのPythonで仮想環境を作るか決めます。
この時、自分の環境にインストールされているバージョンからしか選べないことに注意です。
自分の環境に入っていないバージョンで作成したい場合は、インストールしましょう。
<参考記事> Pythonをインストールする方法(Ubuntu)
今回は、Python3.9.7での作成を例にします。
:~$ python3.9 --version
Python 3.9.7
仮想環境を作成する
mydirというディレクトリにmyenvという名前の仮想環境を作ります。
- 事前準備(ディレクトリの準備)
- 仮想環境を作成
mydirディレクトリを作成し、そのディレクトリに移動します。
# ディレクトリ作成
:~$ mkdir mydir
# 上記で作成したディレクトリに移動
:~$ cd mydir
:~/mydir$
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を仮想環境のディレクトリにインストールします。
- get-pip.pyをダウンロード
- 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
(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
(py37) :~/projects$ deactivate
:~/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を使った仮想環境の構築および入り方・抜け方についてまとめました。また、エラーメッセージが出た時の対処法の一つも合わせて記載いました。同様のエラーで悩んでいる人の助けになればと思います。