FumipoSystem

プログラミングの学習記録やアプリのリリース情報について. ガジェットも好きなのでレビューするつもりです.

Python (v.3) の環境構築

はじめに

Pythonとは,

  • 汎用的に利用可能なプログラミング言語・環境
  • 種々の便利なプログラムをまとめた"パッケージ"をダウンロードし, 組み合わせて使用することを前提としている

目標

  • Python (ver.3) の準備
  • パッケージ管理コマンドの使用
  • Pythonコードの記述・実行

サブ目標

参考 CUIGUI
コンピュータ上でプログラムを実行する時, プログラムとユーザーである人間の間での情報のやりとりは大きく2通りに分けられる.

  • CUI (Character User Interface): "ターミナル"と呼ばれるプログラムを用い, コマンドを表す文字列を入力してコンピュータに指示を与える
  • GUI (Graphical User Interface): 入力するコマンドの種類や実行条件が, ボタンや選択ウィンドウのような視覚要素と結び付けられており, それらの要素を操作することでコンピュータに指示を与える

Pythonの準備

"Python"はプログラミング言語の名前でもあり, その言語で書かれたソースコードを実行する環境を指す名前でもある. 本講座では, ソースコードを記述する言語を"Python言語", 実行環境を"Python"と呼ぶ.

一般に, コンピュータが実行できるプログラムを作成する際には, まず人間が, 人間に理解できる構文や命令のセットを組み合わせて記述されたソースコードを作成する.
そしてその後, ソースコードをコンピュータが認識できる形式のデータ(機械語)へと変換する.
このときプログラミング言語によって, プログラム実行前にソースコード全体をあらかじめ変換する作業(compile)が必要とするものと, プログラム実行時にソースコードの必要な部分が自動的に機械語に変換されるため, コンパイルを意識する必要がないものに分かれる.
Pythonは後者のように, Python言語で書かれたソースコードを逐次的に機械語に変換する機能(interpliter)を提供するものである. また, PythonC言語Fortranなど他の言語で書かれたコンパイル済みのプログラムを実行することができる.

Pythonによるプログラミングを楽にしてくれるパッケージは, Python言語で書かれている場合のほか, 他の言語のソースコードであったり, それをコンパイルしたものであったりする場合がある.
そのようなパッケージをWebから探し出したり, それが依存している他のパッケージを自動的にインストールしたり, 場合によってはそれをコンパイルしたり, 重要だが退屈で煩雑な作業を自動的に行うために, パッケージ管理ツールがある.

ここまでのことを踏まえて,

  1. Pythonインタープリターのインストール
  2. パッケージ管理ツールを通じたパッケージのインストール
  3. 上記ツールを使用可能にする

という順にPythonを準備していく.

参考 Pythonのバージョンについて
現在, version 2 と 3が共存しており, どちらも広く利用されているのだが, 両者のプログラムの構文には一部互換性がない.
従って, インターネットや書籍を参照する時, どちらのバージョンについての内容が記載されているのかには注意を払う必要がある.
今回は, version 3を対象とする.

Pythonのインストール

Pythonのコアとなるプログラムは, Python.org が開発し配布している (ここでは本家Pythonと呼ぶ). 本家Pythonは, インタープリターとしてのPythonと, パッケージ管理ツール"pip"を配布している. pipを利用する場合, パッケージのインストール時にコンパイルが必要となることがある. それ自体はpipが自動的に行うのだが, コンパイルに必要なツールがコンピュータに準備されていない場合には問題が起こる. 要するに, 本家Pythonを使用するには, C言語Fortranその他の言語の実行環境も準備する必要があるということである. macOSはそのような公式ツールがあるのでいいのだが, Windowsは一般にそのようなコンパイルツールを正しく導入することが煩雑である.

それに対し, Anaconda というプロジェクトでは, Pythonインタープリタと独自のパッケージ管理ツール"conda"をセットにして配布している. condaを利用する場合, 各OSに合わせてコンパイル済みのライブラリをインストールできる. 従って, 他のプログラミング言語の実行環境を準備すること無くPythonプログラミングを始めることができる.

今回はWindows, macOSともに本家Pythonを導入する場合を紹介する.

少なくともPython ver.3.6.5 時点で, pipでコンパイル済みのライブラリをインストールができるようになっており,
Windowsでの本家Pythonの導入が容易になったからである.

Windows

Python Release Python 3.6.5 | Python.orgにアクセスし, Windows (理由がなければ"Windows x86-64 web-based installer")をダウンロード, インストール.

f:id:fumipo-theta:20180629203930p:plain

インストーラーのオプションにて,

  • Add Path to python
  • Install for all users

にチェックを入れる

Python実行時にエラーが出る場合, このページ からMicrosoft Visual C++ 2015 再頒布可能パッケージをダウンロードし, インストールする必要があるかもしれない.

macOS, OS X

参考: 【決定版】MacでPythonを使って『機械学習』を学ぶための環境構築

  1. Mac用アプリケーションインストールツール"homebrew"をインストールmacOS 用パッケージマネージャー — macOS 用パッケージマネージャー
    • ターミナル上でコマンド /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" を実行
  2. ターミナルで brew install python3 を実行し最新のPython ver.3をインストール

参考 本家PythonかAnacondaか
Anacondaプロジェクトは便利である一方, コンピュータ内にもともと存在し, OSやPython以外のシステムの動作に使われているコマンドとバッティングを起こしやすいという問題が有る.
この問題は, macOSLinuxで特に深刻である.
また, macOSLinuxでは, コンパイルに必要なツールの多くがもともとOSとともにインストールされていることを考えると, あえてAnacondaプロジェクトを利用しなくともよい.
一方Windowsでは, 基本的にコンパイル用のツールが最初から利用可能では無く, その準備も簡単ではない. また, Anacondaの導入によって影響を受けるシステムコマンドもほとんど無い.
よってPythonへの入門においてAnacondaプロジェクトの利用が有用である.

参考 プログラムのバージョン
プログラムは日々アップデートされていくものである.
本資料作成時には, 最新のPythonのバージョンは3.6.5である.
バージョンを表す記号のうち, 最初の数字(3)はmajor versionで, プログラムの基本設計など大きな変更があった場合に繰り上げられる. 次以降の数字(6,5)はminor versionで, 機能追加や誤りの修正など, より小さな変更があった場合に繰り上げられる.
パッケージによっては, 依存パッケージの特定のバージョンでしか正しく動作しない場合がある.

パッケージのインストール

次のようなコマンドでライブラリのインストールを行う.

pip install ライブラリ名, pip3 install ライブラリ名

Windows

  1. Windows Power Shellの起動
  2. pip install numpy scipy pandas matplotlib bokeh jupyter jupyterlab

macOS, OS X

  1. ターミナルの起動
  2. pip3 install numpy scipy pandas matplotlib bokeh jupyter jupyterlab

参考 基本的なパッケージ

  • numpy: 科学計算
  • scipy: 高度な科学計算・機械学習
  • pandas: データ操作
  • matplotlib: グラフ作成
  • bokeh: 簡便なグラフ作成
  • jupyter, jupyterlab: ソースコード・実行結果・ドキュメントの一括管理

Python言語の記述と実行

ソースコードの作成, 実行結果, メモなどの管理を容易にするため, Jupyterライブラリを用いる.
Jupyterライブラリを通じたGUI環境として, notebookとlabが用意されているが, ここではnotebookを用いる.

Jupyter notebook, labはGoogle ChromeSafariなどのWebブラウザ上で動作する. ともに, ソースコードを記述するエディタを備えており, 記述したものをブラウザ上で実行し, 計算結果やグラフを表示することができる. エディタは複数の"cell"からなり, それぞれのcellに一まとまりの計算やコマンドを入力するようになっている.
それぞれのcellは一つづつ別々に実行することができ, 後から実行するcellでは, 以前に実行したcellの結果を使用することができる.

Jupyter notebookの利用

Jupyter notbook, lab共通してできること

  • Pythonなど様々な言語のソースコード・実行結果の統合管理
  • グラフなどの表示
  • プログラム実行時のエラー表示
  • Markdown形式でドキュメントの作成
  • html, pdfなどへの変換

f:id:fumipo-theta:20180629204010p:plain

Jupyter labでできること

  • タブによるエディタの管理
  • 複数のエディタを並べて表示
  • ターミナルの利用

f:id:fumipo-theta:20180629204027p:plain

Jupyter notebookの起動

ターミナルで次のコマンドを実行する

jupyter notebook 作業ディレクトリ

作業ディレクトリを指定しなければ, ターミナルのカレントディレクトリが自動的に指定される. ここで, 作業ディレクトリおよび, その中に存在するディレクトリ以外に含まれるデータはJupyter notebookから利用できなくなることに注意が必要である.

参考 ディレクトリ, ファイル, パス
Windows, macOS共に, データを階層的に管理する機能を備えている. それはしばしば, フォルダの中にファイルが入っていたり, フォルダの中にサブフォルダが入っているようなアナロジーで理解されている.

一般に, フォルダとしてイメージされているものは, ディレクトリ(directory)と呼ばれる. また, ファイルはファイル(file)である. そして, あるデータが属するディレクトリとファイル名を一意に表したものをパス(path)という.

OSが管理する全てのデータのパスが一意に決まるよう, 他の全てのディレクトリとファイルを含む特別なディレクトリ(root)が存在する.

CUIにおいてプログラムやデータを指定するには, それらへのパスをコンピュータに支持する方法を理解しておく必要がある. また, windowsmacOSLinuxでは, ディレクトリの表し方が異なる場合があるので注意が必要である.

パスの記法

ある名前がディレクトリであることを示すため, 記号 / (半角スラッシュ)や \ (半角バックスラッシュ, 環境によっては半角¥記号に見える)をつける.
Windowsのみ, 慣習的にバックスラッシュが用いられている.

  • "desktop"という名前のディレクトリ: desktop/
  • "desktop"ディレクトリに属する"file"という名前のファイル: desktop/file
  • "desktop"ディレクトリに属する"file.txt"という拡張子"txt"つきのファイル: desktop/file.txt
  • 名前にスペースを含む場合: "desktop/file of data.csv"

ディレクトリやファイルの名前にスペースが含まれる場合, ダブルクォーテーション記号やクォーテーション記号で囲んだほうが良い. (多くのプログラムで半角スペースがコマンドの区切りとして認識されるため)

相対パス絶対パス

パスを示すときに, "現在のディレクトリ"を基準とした相対的な場所の記法と, rootディレクトリからの絶対的な場所の記法とがあり, それぞれ相対パス, 絶対パスという.

ここでまず理解しておくべきことは, ターミナルなどのプログラムを開始した時, そのプログラムは何か一つのディレクトリを監視した状態で起動されるということである.

プログラムが現在監視しているディレクトリを, "current working directory", あるいは"current directory" (カレントディレクトリ)と呼ぶ.
相対パスの表記において, カレントディレクトリは, 記号 ./.\ で表す.
また, カレントディレクトリが属している親ディレクトリを ../..\ で表す.
ディレクトリのさらに親ディレクトリは, カレントディレクトリから見て ../../..\..\ と表される.

一方絶対パスの表記では, rootディレクトリを / と表記するところから始まる.
上記の ./ は例えば /user/user1/desktop/ という絶対パスで表される.
その場合, ../ とは, 絶対パス/user/user1/ のことである.

例として, 下のようなディレクトリ構造を考える.
Windowsでは, rootディレクトリに対応するものが c:\d:\ のように複数あることがある. ちなみに, これらはWindows上で"Cドライブ"や"Dドライブ"と表示されている.

MyComputer/
|- c:\
|   |- Program files\
|   |- user\
|       |- user1\
|           |- desktop\
|           |   |- file.txt
|           |
|           |- document\
|               |- file.txt
|           
|- d:\
root/
|- user1/
|   |- home/
|   |  |- desktop/
|   |     |- file.txt
|   |
|   |- bin/
|   |- lib/
|   |- etc/
|
|- user2/

Windowsにおいて, ユーザー名"user1"でログインしている場合, スタートメニューからターミナルアプリケーションである Windows Power Shell を起動すると, 絶対パス c:\user\user1\ というディレクトリが監視されている.
ここで, desktopディレクトリに属するfile.txtというファイルを指定したい場合, 相対パスを用いると, ./desktop/file.txt と表記する.
一方絶対パスならば, c:\user\user1\desktop\file.txt と表記する.

次に, カレントパスが絶対パス c:\user\user1\desktop であるとする.
このとき, ./file.txtc:\user\user1\desktop\file.txt を表す.
また, ..\document\file.txtc:\user\user1\document\file.txt を表す.

Windows, macOSともに, 任意のディレクトリをカレントディレクトリとしてターミナルアプリケーションを起動したり, ターミナルへのフォルダやファイルのドラッグ&ドロップにより, 絶対パスの自動入力機能を使用できたりする. また, パス入力中に [TAB] キーを押すことで, パスの自動補完機能を利用できる. そのような機能を用いながらCUIに慣れてほしい.

参考: Anacondaの利用

Downloads - Anaconda からPython 3.x 用のものをダウンロードし, インストールする.

パッケージ管理ツールは, Anacondaを導入した場合condaを使う.

condaでは, パッケージを提供するリポジトリを選択できる.
逆に, どのリポジトリからパッケージを取得するかも指定する必要がある. 最もよく使われるリポジトリconda-forge :: Anaconda Cloudであり, このサイトでパッケージ名を検索したり, インストールコマンドを調べることができる.

condaによるパッケージインストールは,

    conda install -c conda-forge numpy scipy 

のようになる. -c conda-forgeリポジトリを指定しているところである.

Anacondaを導入した場合, numpyやscipy, jupyterなどの基本的なパッケージが同時にインストールされているので, 手軽にPythonを実行する準備を整えることができる.