Githubにある 「for Humans」 プロジェクト
githubにあるリポジトリには、そのdescriptionに 「for Humans」 が入っているものがあります。
Pythonの requests というライブラリのdescriptionは 「python HTTP Requests for Humans™」 と書かれており、urllibなどのHTTP Requestを人間が使いやすいように設計されたものです。
つまり 「for Humans」 と書かれたライブラリなどのプロジェクトは、標準ライブラリなどを 人間が使いやすいように設計されたもの であるため、有用なものが多くあります。
この記事ではPythonを使った「for Humans」プロジェクトを紹介したいと思います。
1. keras-team/keras
Deep Learning for humans
Kerasは、TensorFlowなどで実行可能なディープラーニングライブラリ。
人間に使いやすい設計で、kerasで深層学習を始める初心者も多いようです。
日本語ドキュメントが充実してるので参照してください。
2. pypa/pipenv
Python Development Workflow for Humans
nodeは package.json
、rubyは Gemfile
でパッケージを管理しています。
Pythonは pip
や requirements.txt
を使ってパッケージ管理をしていますが、Gemfileなどに比べて機能が十分ではありません。
そこでpythonのパッケージ管理の機能を向上させるのがpipenvです。
日本語ドキュメントもありますし、qiitaにも様々な記事があります。
3. kennethreitz/records
SQL for Humans
recordsはSQLを書くためだけに作られたライブラリで、RedShift
, Postgres
, MySQL
, SQLite
などのDBをサポートしています。
import records
db = records.Database('postgres://...')
rows = db.query('select * from active_users') # or db.query_file('sqls/active-users.sql')
for r in rows:
print(r.name, r.user_email)
4. kennethreitz/delegator.py
Subprocesses for Humans 2.0
delegatorはpythonの subprocess
を人間が使いやすいように設計されたライブラリで、envoyとpexpectというライブラリからインスパイアされたものです。
>>> c = delegator.run('ls')
>>> print c.out
README.rst delegator.py
>>> c = delegator.run('long-running-process', block=False)
>>> c.pid
35199
>>> c.block()
>>> c.return_code
0
個人的にすごく便利だなと思うのは、 パイプを使ったコマンド を簡単に使えるとこです。
>>> c = delegator.chain('fortune | cowsay')
>>> print c.out
_______________________________________
/ Our swords shall play the orators for \
| us. |
| |
\ -- Christopher Marlowe /
---------------------------------------
\ ^__^
\ (oo)\\_______
(__)\ )\\/\
||----w |
|| ||
これをsubprocessでやると、
>>> from subprocess import Popen
>>> proc1 = Popen("fortune", stdin=-1, stdout=-1, stderr=-1)
>>> proc2 = Popen("cowsay", stdin=proc1.stdout, stdout=-1, stderr=-1)
>>> print proc2.communicate()[0]
_______________________________________
/ Our swords shall play the orators for \
| us. |
| |
\ -- Christopher Marlowe /
---------------------------------------
\ ^__^
\ (oo)\\_______
(__)\ )\\/\
||----w |
|| ||
このようにプロセスを2つ作らないとできません。
5. kennethreitz/maya
Datetimes for Humans
mayaはpythonの datetime
を使いやすくしたライブラリです。
通常のdatetimeでは、タイムゾーンを設定するには pytz
という専用のライブラリを使って以下のように設定します。
>>> from pytz import timezone
>>> from datetime import datetime
>>> jst_now = datetime.now().astimezone(timezone('Asia/Tokyo'))
>>> print(jst_now)
2016-03-20 10:07:29.056724+09:00
しかし、mayaを使うと…
>>> import maya
>>> now = maya.now()
>>> now.datetime(to_timezone="Asia/Tokyo")
datetime.datetime(2018, 3, 24, 17, 55, 10, 578125, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
6. kvesteri/validators
Python Data Validation for Humans
validatorsは様々な種類のデータをvaliateしてくれるライブラリです。
>>> import validators
>>> validators.email("sample@gmail.com")
True
>>> validators.between(5, min=2)
True
>>> validators.between(500, max=400)
ValidationFailure(func=between, args=...)
>>> validators.domain('example.com')
True
>>> validators.ipv4("192.168.33.10")
True
>>> validators.url('http://foobar.dk')
True
7. cypreess/python-rex
Python Regular Expressions for Humans
rexは、pythonの正規表現ライブラリ re
を使いやすくしたもので、 非常に使いやすくなっています。
reを使うと:
import re
regex = re.compile("\[a-z\]{3}-(\\d{4})", flags=re.IGNORECASE)
m = regex.search("Your ticket number: XyZ-1047. Have fun!")
if m is not None:
print m.group(1)
else:
print None
rexを使うと:
from rex import rex
print ("Your ticket number: XyZ-1047. Have fun!" == rex("/\[a-z\]{3}-(\\d{4})/i"))\[1\]
8. dbader/schedule
Python job scheduling for humans
scheduleは名前の通り、定義したジョブを定期的に実行するためのライブラリです。
scheduleはその定期実行の書き方が面白くて、 10分ごとにジョブを実行 するには、
import schedule
def job():
print("I'm working...")
schedule.every(10).minutes.do(job)
このように書きます。他にも
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
これらの書き方があります。スケジューリングしたジョブを実行するためには、
import time
while True:
schedule.run_pending()
time.sleep(1)
このように書きます。
まとめ
以上、Pythonを使った「for Humans」プロジェクトの一部を紹介しました。
Githubで "for Humans" と検索すると、python以外にもいろんな言語で書かれたプロジェクトが出てきますので、試しにやってみて下さい。