Python 3 をインストールして venv で環境を設定する

Machine Intelligence な TensorFlow を使ってみたくて、その前に Python をインストールして、使えるところまで調べてみました。

環境

  • macOS Sierra バージョン 10.12.3
  • Python 3.6.0

Python 3 のインストール

Mac には標準で Python 2.7.10 がインストールされているようなのですが、最新版は Python 3 のようですので、Python 3 をインストールすることにしました。 まだ Python 2 でしか動かない有用なライブラリーがあるらしいことも認識して、Python 3 を使おうと思いました。

現在は Python 3 が最新版の Python ですが、 Python 2 もまだ活発に利用されています。なのであなたのプロジェクトを両方のメジャーリリースにおいて動作可能にしておくのがよいでしょう。このガイドでは、 Python 2 と 3 を同時にサポートするにはどうすればよいかを解説します。

…略…

コア開発者の視点から Python3 が世に出てきたが理由を読みたい場合は、 Nick Coghlan の Python 3 Q & A または Brett Cannonによる `Why Python 3 exists がおすすめです。

Python 2 から Python 3 への移植 — Python 3.6.1 ドキュメント

Python のサイトでは Mac に Python をインストールする際にはインストーラをダウンロードしてインストールするように記載されているようです。

4.1. MacPython の入手とインストール(原文)

Mac OS X 10.8 には Apple によって Python 2.7 がプリインストールされています。Python の Web サイト (https://www.python.org) から最新バージョンの Python 3 を取得しインストールすることもできます。新しい Intel の CPU でも古い PPC の CPU でもネイティブに動作する “ユニバーサル・バイナリ” ビルドの最新のものがあります。

4. Macintosh で Python を使う — Python 3.6.1 ドキュメント

が、Homebrew にもあるようなので、Homebrew からインストールしてみました。

Homebrew は前にインストールしておいたものです。

Homebrew で python を検索してみます。

$ brew search python
app-engine-python          micropython                python3
boost-python               python                     wxpython
gst-python                 python-markdown            zpython
homebrew/apache/mod_python               Caskroom/cask/kk7ds-python-runtime
homebrew/python/vpython                  Caskroom/cask/mysql-connector-python

python3 がそれかな。

Python 3 をインストールします。

$ brew install python3
==> Installing dependencies for python3: readline, sqlite, gdbm, xz
==> Installing python3 dependency: readline
==> Downloading https://homebrew.bintray.com/bottles/readline-7.0.1.sierra.bottl
######################################################################## 100.0%
==> Pouring readline-7.0.1.sierra.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

macOS provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.


Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/readline/lib
    CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
🍺  /usr/local/Cellar/readline/7.0.1: 46 files, 2M
==> Installing python3 dependency: sqlite
==> Downloading https://homebrew.bintray.com/bottles/sqlite-3.16.2.sierra.bottle
######################################################################## 100.0%
==> Pouring sqlite-3.16.2.sierra.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

macOS provides an older sqlite3.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/sqlite/lib
    CPPFLAGS: -I/usr/local/opt/sqlite/include

==> Summary
🍺  /usr/local/Cellar/sqlite/3.16.2: 11 files, 2.9M
==> Installing python3 dependency: gdbm
==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.12.sierra.bottle.tar
######################################################################## 100.0%
==> Pouring gdbm-1.12.sierra.bottle.tar.gz
🍺  /usr/local/Cellar/gdbm/1.12: 18 files, 486.9K
==> Installing python3 dependency: xz
==> Downloading https://homebrew.bintray.com/bottles/xz-5.2.2.sierra.bottle.tar.
######################################################################## 100.0%
==> Pouring xz-5.2.2.sierra.bottle.tar.gz
🍺  /usr/local/Cellar/xz/5.2.2: 91 files, 1.4M
==> Installing python3
==> Downloading https://homebrew.bintray.com/bottles/python3-3.6.0.sierra.bottle
######################################################################## 100.0%
==> Pouring python3-3.6.0.sierra.bottle.tar.gz
==> Using the sandbox
==> /usr/local/Cellar/python3/3.6.0/bin/python3 -s setup.py --no-user-cfg instal
==> /usr/local/Cellar/python3/3.6.0/bin/python3 -s setup.py --no-user-cfg instal
==> /usr/local/Cellar/python3/3.6.0/bin/python3 -s setup.py --no-user-cfg instal
==> Caveats
Pip, setuptools, and wheel have been installed. To update them
  pip3 install --upgrade pip setuptools wheel

You can install Python packages with
  pip3 install <package>

They will install into the site-package directory
  /usr/local/lib/python3.6/site-packages

See: http://docs.brew.sh/Homebrew-and-Python.html

.app bundles were installed.
Run `brew linkapps python3` to symlink these to /Applications.
==> Summary
🍺  /usr/local/Cellar/python3/3.6.0: 3,597 files, 55.7M

readline, sqlite, gdbm, xz のパッケージに依存しているようで、一緒にインストールされたようでした。

python3 コマンドで Python 3 が使えるようです。 Mac は標準で Python 2 がインストールされていて、python コマンドで Python 2 が使えるということのようです。

$ python3 --version
Python 3.6.0
$ which python3
/usr/local/bin/python3

3.6.0 がインストールされていることが確認できました。

Python 3 をインストールした直後のパッケージは次のようになっていました。

$ pip3 list --format=columns
Package    Version
---------- -------
pip        9.0.1
setuptools 32.2.0
wheel      0.29.0
$ ls /usr/local/lib/python3.6/site-packages/
__pycache__				setuptools
easy_install.py				setuptools-32.2.0-py3.6.egg-info
pip					sitecustomize.py
pip-9.0.1-py3.6.egg-info		wheel
pkg_resources				wheel-0.29.0-py3.6.egg-info

pip, setuptools, wheel の 3 つのパッケージが標準でインストールされた状態のようです。

venv の環境を作る

仮想環境の作成と管理を行うためのモジュールが venv です。 venv は通常利用可能なもっとも新しいバージョンの Python をインストールします。複数のバージョンの Python がインストールされている場合、 python3 のように利用したいバージョンを指定して実行することで Python バージョンを選択できます。

仮想環境を作るには、仮想環境を置くディレクトリを決めて、 そのディレクトリのパスを指定して、 venv をスクリプトとして実行します:

python3 -m venv tutorial-env

これは tutorial-env ディレクトリがなければ作成して、その中に Python インタプリタ、標準ライブラリ、その他関連するファイルを含むサブディレクトリを作ります。

12. 仮想環境とパッケージ — Python 3.6.1 ドキュメント

実行してみます。

$ python3 -m venv tutorial-env

tutorial-env という名前のディレクトリーにしてみました。

ディレクトリーに移動して、中を見てみます。

$ cd tutorial-env/
$ ls
bin		include		lib		pyvenv.cfg

bin, include, lib のディレクトリーと、pyvenv.cfg ファイルが作成されたみたいです。

venv の環境を有効にする

仮想環境を作ったら、それを有効化する必要があります。

Windows の場合:

tutorial-env\Scripts\activate.bat

Unix や Mac OS の場合:

source tutorial-env/bin/activate

(このスクリプトは bash shell で書かれています。 csh や fish を利用している場合、代わりに利用できる activate.csh と activate.fish スクリプトがあります。)

仮想環境を有効化すると、シェルのプロンプトに利用中の仮想環境が表示されるようになり、python を実行するとその仮想環境の Python を実行するようになります:

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May  6 2016, 10:59:36)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>

12. 仮想環境とパッケージ — Python 3.6.1 ドキュメント

実行してみます。

$ source bin/activate
(tutorial-env) $

最初に入っているパッケージは次の通りでした。

$ pip list --format=columns
Package    Version
---------- -------
pip        9.0.1  
setuptools 28.8.0
$ ls lib/python3.6/site-packages/
__pycache__			pkg_resources
easy_install.py			setuptools
pip				setuptools-28.8.0.dist-info
pip-9.0.1.dist-info

仮想環境には標準で 2 つのパッケージがインストールされているようです。

環境変数の $PATH を見てみます。

(tutorial-env) $ echo $PATH
/Users/user/tutorial-env/bin:/Users/user/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:./node_modules/.bin

仮想環境のディレクトリーの bin が先頭に挿入されていました。

$ python --version
Python 3.6.0

python3 コマンドで仮想環境を作成したため、python コマンドで python3 が呼び出しできるようです。 この仮想環境を有効にしている状態では Python 2 を実行することはできないことになるのかな。

venv の環境でパッケージをインストールする

パッケージ名を指定してそのパッケージの最新版をインストールすることができます:

(tutorial-env) $ pip install novas
Collecting novas
  Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
  Running setup.py install for novas
Successfully installed novas-3.1.1.3

12. 仮想環境とパッケージ — Python 3.6.1 ドキュメント

pip でインストールするようです。

(tutorial-env) $ pip install novas
Collecting novas
  Downloading novas-3.1.1.4.tar.gz (139kB)
    100% |████████████████████████████████| 143kB 951kB/s
Installing collected packages: novas
  Running setup.py install for novas ... done
Successfully installed novas-3.1.1.4

パッケージを確認します。

(tutorial-env) $ pip list --format=columns
Package    Version
---------- -------
novas      3.1.1.4
pip        9.0.1  
setuptools 28.8.0
(tutorial-env) $ ls lib/python3.6/site-packages/
__pycache__			pip-9.0.1.dist-info
easy_install.py			pkg_resources
novas				setuptools
novas-3.1.1.4-py3.6.egg-info	setuptools-28.8.0.dist-info
pip

作成したディレクトリーの中の site-packages に novas がインストールされたようです。

venv を無効にする

You can deactivate a virtual environment by typing “deactivate” in your shell.

28.3. venv — 仮想環境の作成 — Python 3.6.1 ドキュメント

無効にしてみます。

(tutorial-env) $ deactivate
$

プロンプトの最初の (ディレクトリーの名前) がなくなりました。

仮想環境が無効な状態のパッケージに影響がないことを確認してみます。

$ pip3 list --format=columns
Package    Version
---------- -------
pip        9.0.1  
setuptools 32.2.0
wheel      0.29.0
$ ls /usr/local/lib/python3.6/site-packages/
__pycache__				setuptools
easy_install.py				setuptools-32.2.0-py3.6.egg-info
pip					sitecustomize.py
pip-9.0.1-py3.6.egg-info		wheel
pkg_resources				wheel-0.29.0-py3.6.egg-info

novas のパッケージがないので、影響はないみたいでした。

終わり

一度調べてしまえばなんてことはないことだと思いますが、新しく覚えることが多くて、なかなか進めることができませんでした。 Python 2 がまだ現役とか知らないですし、ここには記載しませんでしたが、easy_install, setuptools, wheel とか知らないですし、Anaconda とか知らないですし。 基礎をすっ飛ばしても成長はないと思いますので、じっくりやっていきます。

参考