/python_exercise

李研M0春勉強会のPython資料

Primary LanguagePython

Pythonの初歩2: モジュールの活用

これは李研新M0向け勉強会のPythonに関する資料です。

[TOC]

モジュール(module)について

モジュールとは、C++でいうところのライブラリとだいたい同じ概念です。効率的な開発には、本体に標準で付属するモジュール群や、サードパーティー製のモジュールの活用が不可欠です。 今回の勉強会ではPythonの環境構築にAnacondaを用いたので、Python本体(+標準モジュール群)だけでなく、よく使われるサードパーティー製モジュール群も一緒にインストールされており、すぐ使える状態が整っています。

標準モジュール

  • os, os.path ディレクトリやファイルなど、ファイルシステム上の操作を行うモジュールです。
import os
dir_name = "data"
file_name = "0.jpg"
# ファイルパスの安全な結合方法
file_path = os.path.join(dir_name, file_name)
print(os.path.exists(file_path)) # ファイルの存在チェック
  • re 正規表現のモジュールです。
import re
text = "あいうえおかきくけこさしすせそ"
pattern = "お(.*)さ"
match = re.search(pattern, text)
print(match.group(1)) # かきくけこ
  • urllib インターネットからURLをもとにデータを取得するためのモジュールです。 ファイルを読み書きするためのopen関数に似た作りになっていて、openした後にreadして読み込むところは同じです。下記の例では、yahoo.co.jpのトップページをダウンロードして表示しています。
import urllib
f = urllib.request.urlopen('http://www.yahoo.co.jp')
html = f.read()
print(html)
  • smtplib メールサーバを介してメールを送信するためのモジュールです。 【これは実行不要です】なお、これを実行するためには、McAfeeの アクセス保護を無効にする 必要があります。また、このサンプルは研究室LAN内からしか実行できません。しかし、SMTPサーバとしてgmailなどを使えば、どこからでも送信可能にできます(その場合、若干の拡張が必要になります)。
import smtplib
# 研究室のメールサーバに接続
server = smtplib.SMTP('aissrv.ais.ics.ritsumei.ac.jp')
# 送信者アドレス、宛先アドレス、本文を指定する
server.sendmail('sakurai@ais.ics.ritsumei.ac.jp',
				'rsakurai@fc.ritsumei.ac.jp',
				'This is a test mail')
  • SimpleHTTPServer 【Python3未対応につき動きません】カレントディレクトリを簡易HTTPサーバにしてしまうモジュールです。
import SimpleHTTPServer
SimpleHTTPServer.test()

上記スクリプトを実行した後、ブラウザから http://localhost:8000/ を開くと、カレントディレクトリのファイル一覧が表示されます。ファイルのリンクをクリックするとファイルが表示され、ダウンロードすることもできます。普通にインターネットに公開されているため、 http://133.19.61.144:8000/ にアクセスすると、創成用14番機のファイルがダウンロードできます。 危険なので使用には注意が必要です。

サードパーティ製モジュール

開発内容に応じて必要なモジュールをインストールすることになると思います。

インストール方法

サードパーティ製モジュールは様々な方式で配布されており、インストール方法にも色々あるため、正直言ってややこしいです。PythonのインストールにAnacondaを使った場合は、以下の3つの方法で外部のモジュールをインストールすることになります。

  1. conda install module_name を使う方法
  2. pip install module_name を使う方法
  3. ソースコードをダウンロードし、python setup.py install とする方法

これらは、番号が若いほうの方法ほど推奨されます。そのため、インストールしたいモジュールを見つけた場合は、上から順番に試してください。

1のcondaは、Anacondaのパッケージ管理機能を使う方法です。可能ならこの方法を使うことが理想的です。

  • 利点: パッケージ間の依存関係やバージョンに関わる整合性が、Anacondaの開発スタッフによって検証されているので、不具合が起きにくい。また、アンインストールが簡単。
  • 欠点: Anacondaで管理可能なモジュールはメジャーなものだけなので、マイナーなモジュールはこの方法でインストールできないことが多い。

具体的には、condaの対応モジュール一覧 にあるものはconda経由でインストールできます(モジュール名の右肩にLinuxとか付いているものは除く)。

2のpipは現状最も一般的なインストール方法です。condaが無理だった場合にこの方法を使います。

  • 利点: 多くのモジュールがpipでインストールできる。また、アンインストールが簡単。
  • 欠点: Anacondaほど整合性のチェックが徹底的ではない。

pipはPyPiというモジュール共有システムを介してインストールする方法です。pipも同様にパッケージ管理機能を有しており、依存関係の解決は行われます。しかし、検証はモジュール作者に委ねられているため、不具合はありえます。

3のsetup.pyは、パッケージ管理を介さず、ソースコードから直接インストールする方式です。この方法でインストールした場合は、 自動アンインストールできません

  • 利点: インストール方法が提供されていること自体が利点。
  • 欠点: パッケージ管理機能の対象とならない。また、アンインストールは手動で行う必要がある。

これは、モジュールの作者が提供する直接的なインストール方法です。GitHubなどにおいてソースコードの状態で配布してくれている場合に、このインストール方法が提供されていることがあります。