schedule2020-03-19

UbuntuにPython3.8とvenvの仮想環境をインストールする

UbuntuにPython3をvenvを使ってインストールする方法です。 Python3のインストールだけだとすぐに終わっちゃうので仮想環境も構築します。

venvは仮想環境をつくるための標準ツールです。 pipでインストールするパッケージディレクトリごとに実行環境を変えたり、バージョン管理を楽にしてくれます。

今回の用途はゼロから作るDeepLeaningの実行環境を整えるためですので、同時に必要なライブラリもインストールします。

環境

  • Ubuntu 18.04.4 LTS

インストールするもの

  • Python 3.8.0
  • NumPy
  • Matplotlib

Pythonは3系であれば問題ありません。 最新の3.8.0をインストールします。

ライブラリのSciPyとCuPyはオプションとなっていたので、必要になったらいつかインストールします。

venvはいらないから簡単にインストールしたい

Ubuntu 18.04(または16.10)では以下のコマンドだけでPython3.8をインストール出来ます。

$ sudo apt-get update
$ sudo apt-get install python3.8

# こうすると3.6.9がインストールできる
$ sudo apt-get remove python3

インストールできたらpython3コマンドで確認できます。

$ python3.8 --version
Python 3.8.0

削除する場合は$ sudo apt-get remove python3.8`です。

Ubuntuに限らずLinuxではPython2が動いており、pythonコマンドはPython2に割り当てられています。 作業していると結構コマンドを打ち間違えるので、venv使ってディレクトリごとに環境をPython3に切り替えたいと思いました。

venvで仮想環境を構築する

venvは仮想環境を作るためのツールで、Python3.3から標準ツールとなりました。

私は以前サードパーティのvirtualenvで仮想環境を作ったことがあります。 その時はPython3.6でしたがvenvの存在は知らなかった。。。ので構築したら比べてみます。

Zappaを使ってPythonのコードをAWS Lambdaにデプロイする

venvのインストールと仮想環境の構築はHow to Create Python Virtual Environments on Ubuntu 18.04を参考にします。

Python3をインストールする

venvはPython3.3以降が必要です。 最新のpython3.8をインストールします。

ちなみに以下の手順のpython3.8をすべてpython3にするとpython3.6の環境が出来上がります。

$ sudo apt-get update
$ sudo apt-get install python3.8
$ python3.8 --version
Python 3.8.0

これで十分な気もしてきたけど進めます。

続いてvenvのモジュールが入ったpython3-venvをインストールします。

$ sudo apt install python3.8-venv

仮想環境を作る

my-projectというディレクトリの配下に仮想環境を作ります。

# まずは仮想環境の名前を決める。
$ python3.8 -m venv my-project-env

# ディレクトリを移動して
$ cd path/to/my-project

# そこを仮想環境とする
$ source my-project-env/bin/activate
(my-project-env) suzu6:~/path/to/my-project$ 

すると$のまえに環境名がつくようになります。 (sourceコマンドなんで環境変数を切り替えてるんでしょうね)

(my-project-env) suzu6:~/path/to/my-project$  python --version
Python 3.8.0

(my-project-env) suzu6:~/path/to/my-project$ pip -V
pip 9.0.1 from /home/suzumura/git/nuxt-blog/my-project-env/lib/python3.8/site-packages (python 3.8)

pythonpipのバージョンも切り替わりました!

pipでNumPyとMatplotlibをインストールしてみます。

# NumPyとMatplotlibをインストール
(my-project-env) suzu6:~/path/to/my-project$ pip install numpy matplotlib

# バージョン確認
(my-project-env) suzu6:~/path/to/my-project$ pip freeze
cycler==0.10.0
kiwisolver==1.1.0
matplotlib==3.2.0
numpy==1.18.2
pkg-resources==0.0.0
pyparsing==2.4.6
python-dateutil==2.8.1
six==1.14.0

その他のコマンド

# 仮想環境を閉じる
(my-project-env) suzu6:~/path/to/my-project$ deactivate

# 仮想環境を削除する
$ rm -r my-project-env

venvのヘルプ

$ python3.8 -m venv -h
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR ...]

Creates virtual Python environments in one or more target directories.

positional arguments:
  ENV_DIR               A directory to create the environment in.

optional arguments:
  -h, --help            show this help message and exit
  --system-site-packages
                        Give the virtual environment access to the system site-packages dir.
  --symlinks            Try to use symlinks rather than copies, when symlinks are not the default for the platform.
  --copies              Try to use copies rather than symlinks, even when symlinks are the default for the platform.
  --clear               Delete the contents of the environment directory if it already exists, before environment creation.
  --upgrade             Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place.
  --without-pip         Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default)
  --prompt PROMPT       Provides an alternative prompt prefix for this environment.

Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory.

python自体のバージョンは--upgradeでアップグレードできるみたい。 ダウングレードはないようなんで、特定のバージョンが必要な場合はインストール手順のpython3.8をすべてpython3.xにするとその環境が出来上がります。(3.3以上)

venvとvirtualenv

性能面は調べていないため割愛するが、扱いやすさは正直変わらないと思う。 ただ、日本語で参考になる記事がvirtualenvのほうが圧倒的に多いためとっつきやすい。

virtualenvはおまけだけど、AWS Lambdaで遊んだ記事もあるのでよければどうぞ。 Zappaを使ってPythonのコードをAWS Lambdaにデプロイする

参考