11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KLab EngineerAdvent Calendar 2021

Day 6

実行できる Python 標準ライブラリ

Last updated at Posted at 2021-12-05

KLab Engineer Advent Calendar 2021 の 6 日目

python -m オプション。 これはライブラリを直接実行するためのオプションです。これでもって標準ライブラリを実行したときこれらがどのように動作するのかを紹介します。便利なもの、どのような動きをするのか想像できないものなど、さまざまで確認していて楽しかったです。

Python 3.10 で確認しています。なお、これらの動作は公式ドキュメントに記載がないもの、単体テスト用途と思われるものが混じっています。それらについて将来のバージョンで同じ動作をし続けるかどうかの保証はありません。

this

The Zen of Python を表示するイースターエッグです。インタラクティブシェルに import this と打ち込むことで読むことができる、と紹介されることが多いライブラリですが、 python -m this でも読むことが可能です。

asyncio

await 文が使用できるインタラクティブシェルを立ち上げます。 IPython などの高度なシェルが入っていない環境でも asyncio を試したい、というときに使えます。

$ python -m asyncio
asyncio REPL 3.10.0 (tags/v3.10.0:b494f5935c, Oct  5 2021, 23:50:57) [GCC 9.3.0] on linux
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> await asyncio.sleep(7)

venv

Python 仮想環境を構築します。公式ドキュメント冒頭には -m オプションで使う使い方が書かれており import venv とコードに書く使い方をした人のほうがすくないのではないでしょうか。

$ python3 -m venv /path/to/new/virtual/environment

dis

Python コードを渡すと dis.dis を用いて Python コードをディスアセンブリしてその結果を出力します。

$ cat hello.py
print('Hello, World!')
$ python -m dis hello.py
  1           0 LOAD_NAME                0 (print)
              2 LOAD_CONST               0 ('Hello, World!')
              4 CALL_FUNCTION            1
              6 POP_TOP
              8 LOAD_CONST               1 (None)
             10 RETURN_VALUE

calendar

カレンダー出力を行うライブラリです。これを実行すると cal コマンドが生成するような text もしくは XHTML 1.0 形式でカレンダーを作ることができます。

$ python -m calendar 2021 12
   December 2021
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

webbrowser

ブラウザを立ち上げて渡された URL を開きます。 webbrowser を直接実行する用法はドキュメントに記載があり、今後も使えるものと思われます。

$ python -m webbrowser
Usage: C:\Users\fgshu\AppData\Local\Programs\Python\Python310\lib\webbrowser.py [-n | -t] url
    -n: open new window
    -t: open new tab

$ python -m webbrowser -t "https://qiita.com/advent-calendar/2021/klab"    

http.server

簡易 HTTP サーバーが立ち上がります。テスト目的でブラウザになにか表示したいときには使えるかもしれません。

$ python -m http.server --help
usage: server.py [-h] [--cgi] [--bind ADDRESS] [--directory DIRECTORY] [port]

positional arguments:
  port                  Specify alternate port [default: 8000]

options:
  -h, --help            show this help message and exit
  --cgi                 Run as CGI Server
  --bind ADDRESS, -b ADDRESS
                        Specify alternate bind address [default: all interfaces]
  --directory DIRECTORY, -d DIRECTORY
                        Specify alternative directory [default:current directory]

pickle

pickle は Python オブジェクトをそのままシリアライズできるライブラリです。これを用いて作られた pickle 形式のファイルを渡して実行すると、その内容を出力してくれます。

$ python -c "import pickle; pickle.dump('spam', open('spam.pickle', 'wb'))"
$ python -m pickle spam.pickle
'spam'

出力には pprint.pprint が使われるので入り組んだコンテナオブジェクトでも読みやすく整形されます。

zipfile

zipfile は ZIP アーカイブを操作するためのライブラリです。これは zip, unzip コマンドのように動作します。 python -m zipfile -e spam.zip で ZIP アーカイブの内容を展開することができます。これで unzip コマンドがなくても安心?

$ python -m zipfile --help
usage: zipfile.py [-h] (-l <zipfile> | -e <zipfile> <output_dir> | -c <name> [<file> ...] | -t <zipfile>)

A simple command-line interface for zipfile module.

options:
  -h, --help            show this help message and exit
  -l <zipfile>, --list <zipfile>
                        Show listing of a zipfile
  -e <zipfile> <output_dir>, --extract <zipfile> <output_dir>
                        Extract zipfile into target dir
  -c <name> [<file> ...], --create <name> [<file> ...]
                        Create zipfile from sources
  -t <zipfile>, --test <zipfile>
                        Test if a zipfile is valid

tarfile

tarfile は tar アーカイブを操作するためのライブラリです。これは tar コマンドのように動作します。 python -m tarfile -c spam.tar spam.txt ham.txt eggs.txt として tar アーカイブ spam.tar を作成することができます。 tar コマンドがなくても安心? とおもいきや、圧縮形式各種に対応していない、 2021 年現在 Windows にすら tar.exe が存在するなとといったことから出番は少なそうです。

$ python -m tarfile --help
usage: tarfile.py [-h] [-v]
                  (-l <tarfile> | -e <tarfile> [<output_dir> ...] | -c <name> [<file> ...] | -t <tarfile>)        

A simple command-line interface for tarfile module.

options:
  -h, --help            show this help message and exit
  -v, --verbose         Verbose output
  -l <tarfile>, --list <tarfile>
                        Show listing of a tarfile
  -e <tarfile> [<output_dir> ...], --extract <tarfile> [<output_dir> ...]
                        Extract tarfile into target dir
  -c <name> [<file> ...], --create <name> [<file> ...]
                        Create tarfile from sources
  -t <tarfile>, --test <tarfile>
                        Test if a tarfile is valid

gzip

gzip は gzip 形式のファイルを操作するライブラリです。これは gzip, gunzip コマンドのように動作します。なお、 bz2lzma も同様に動きそうな気がしますがこれらは直接実行しても何も起こりません。

$ python -m gzip --help   
usage: gzip.py [-h] [--fast | --best | -d] [file ...]

A simple command line interface for the gzip module: act like gzip, but do not delete the input file.

positional arguments:
  file

options:
  -h, --help        show this help message and exit
  --fast            compress faster
  --best            compress better
  -d, --decompress  act like gunzip instead of gzip

base64

ファイルもしくは標準入力からうけとったデータを base64 形式でエンコードもしくはデコードすることができます。

$ python -m base64 -h
option -h not recognized
usage: C:\Users\fgshu\AppData\Local\Programs\Python\Python310\lib\base64.py [-d|-e|-u|-t] [file|-]
        -d, -u: decode
        -e: encode (default)
        -t: encode and decode string 'Aladdin:open sesame'

$ echo spam | python -m base64
C38hbQo=

quopri ライブラリ、 uu ライブラリも同様の使い方が可能です。

zipapp

Python から直接実行できて zip 圧縮されている .pyz ファイルを作成します。

timeit

Python ベンチマークである timeit は -m オプションで直接実行するのが使い方の一つです。公式ドキュメント冒頭にこの使い方が書かれています。

pdb

Python デバッガです。 -m オプションで直接実行するのが使い方の一つです。

trace

Python 実行の様子を追跡する trace ライブラリは -m オプションで直接実行するのが使い方の一つです。

ast

Python コードの抽象構文木を確認できるライブラリ ast は Python 3.9 より -m での直接実行をサポートし始めました。

doctest

可読かつ動かせるテストを作る doctest 。これを動かす方法の一つは -m で直接実行するというものです。

pydoc

Python コードの docstring から説明文を生成します。インタラクティブシェルで help() を呼び出したときによむことができるテキストと同等のものが得られます。また、 -p ポート番号とすることで HTTP サーバーが立ち上がります。

テストやデモンストレーションが行われるライブラリ

aifc

AIFF オーディオファイルの情報を表示します。

cgi

HTML 形式で環境変数などを出力します。

dbm

whichdb でファイルフォーマットを推測します。

ensurepip

[pip] (https://pip.pypa.io/en/stable/) をインストールします。あえて実行しなくとも通常インストール済みのものです。

filecmp

dircmp で二つのディレクトリを比較します。

fileinput

ファイルをひとつなぎにしつつ、どのファイル由来の行か、何行目かを出力します。

ftplib

簡易 FTP クライアントが立ち上がります。

getopt

print(getopt(sys.argv[1:], "a:b", ["alpha=", "beta"])) が実行されます。

$ python -m getopt -a spam ham eggs
([('-a', 'spam')], ['ham', 'eggs'])

heapq

doctest を自身に対して実行します。

imaplib

IMAP4 サーバを指定すると接続テストを行います。

imghdr

カレントディレクトリの画像ファイルの形式を推測します。

locale

getdefaultlocale, resetlocale, setlocale(LC_ALL, "") の動作確認を行います。

mailcap

mailcap.getcaps() 他を実行します。

netrc

netrc() を実行します。

nntplib

nntplib を用いてネットニュースを読むデモが実行されます。

> py -m nntplib -h
usage: nntplib.py [-h] [-g GROUP] [-s SERVER] [-p PORT] [-n NB_ARTICLES] [-S]

nntplib built-in demo - display the latest articles in a newsgroup

options:
  -h, --help            show this help message and exit
  -g GROUP, --group GROUP
                        group to fetch messages from (default: gmane.comp.python.general)
  -s SERVER, --server SERVER
                        NNTP server hostname (default: news.gmane.io)
  -p PORT, --port PORT  NNTP port number (default: 119 / 563)
  -n NB_ARTICLES, --nb-articles NB_ARTICLES
                        number of articles to fetch (default: 10)
  -S, --ssl             use NNTP over SSL

platform

platform.platform を実行します。

> py -m platform --terse
Windows-10

$ python -m platform --terse
Linux-5.4.0.89-generic-x86_64-with-glibc2.29

pprint

pformat 関数ほかのベンチマークを実行します。

poplib

host, user, password の 3 引数をうけとり POP3 で受信します。

random

random ほかのベンチマークを実行します。

shlex

shlex, gettoken をファイルもしくは標準入力に対して実行することで字句解析器 shlex の動作の様子を確認することができます。

smtplib

localhost へメールの送信を試みます。

sndhdr

カレントディレクトリの音声ファイルの形式を推測します。

telnetlib

簡易 Telnet クライアントが立ち上がります。

test

Python そのものに対する regression test が実行されます。

$ python -m test --help
usage: python -m test [options] [test_name1 [test_name2 ...]]
python path/to/Lib/test/regrtest.py [options] [test_name1 [test_name2 ...]]

Run Python regression tests.

(オプション多数のため省略。ぜひ、動かしてみてください。)

textwrap

print(dedent("Hello there.\n This is indented.")) が実行されます。

tkinter

Tcl/Tk のバージョンが書かれたウィンドウが開きます。

turtle

タートルグラフィックスのデモが 2 つ実行されます。見てて楽しいです。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?