techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Python で配布用モジュールの作成

Python で配布用モジュールの作成

Python で、pip install でインストール可能なモジュールを作成する。

Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08) 

バージョンは3.6.3。
3.4 以降 setuptools が簡単に使えるようになっている。

準備

とりあえず書いたコードが PEP 8 準拠できているか確認する。

やらなくてもモジュール作成はできるので特にこのタイミングでやる意味はない。
(むしろコーディング中からマメに確認しておくべし)

PEP とは

PEP は Python Enhancement Protocol の略称。
コードフォーマットについてのベストプラクティス集がPEP 8。

ちなみに PEP 8 はStyle Guide for Python Codeで、PEP 257 は docstring のフォーマットについて触れている。どちらも一読すべし。

pytest/pep8

PEP 8 準拠できているかは pytest を使って確認できる。

pytest と pep8 プラグインのインストール

pip を使ってインストール可能。
これはグローバルに入れるべきか仮想環境に入れるかよくわからん。定石はあるのだろうか。
とりあえず仮想環境に入れる。

$ python3 -m venv .
$ source ./bin/activate
$ pip install pytest
$ pip install pytest-pep8

実行

上記インストールで py.test が使えるようになる。

$ pytest --pep8 ./panic.py 
============================= test session starts ==============================
platform darwin -- Python 3.6.3, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /Users/kazuhirofurue/work/hfpython, inifile:
plugins: pep8-1.0.6
collected 1 item                                                                

panic.py .

=========================== 1 passed in 0.02 seconds ===========================

違反がなければパスする。
違反箇所は丁寧に指摘してくれるので一つずつ修正していく。

ディストリビューションパッケージの作成

setuptools を使用する。
モジュール作成したいファイルと同じディレクトリに以下を用意する。

  • README.txt
  • setup.py
$ mkdir mymodules
$ cp panic.py mymodules
$ cd mymodules
$ touch README.txt
$ touch setup.py

setup.py

from setuptools import setup

setup(
    name='hoge',
    version='1.0',
    description='Hoge hoge tools',
    author='fuga',
    author_email='fuga@example.com',
    url='example.com',
    py_modules=['panic'],
)

最後にカンマあるのすごい違和感あったけど Python ではこれ許容だそうな。もちろん無くてもいい。

README.txt はひとまずファイルだけあればモジュール作成は可能。内容はまた今度。

setup.py を実行する。

$ python3 setup.py sdist
running sdist
running egg_info
writing panic.egg-info/PKG-INFO
writing dependency_links to panic.egg-info/dependency_links.txt
writing top-level names to panic.egg-info/top_level.txt
reading manifest file 'panic.egg-info/SOURCES.txt'
writing manifest file 'panic.egg-info/SOURCES.txt'
running check
creating panic-1.0
creating panic-1.0/panic.egg-info
copying files to panic-1.0...
copying README.txt -> panic-1.0
copying setup.py -> panic-1.0
copying panic.py -> panic-1.0
copying panic.egg-info/PKG-INFO -> panic-1.0/panic.egg-info
copying panic.egg-info/SOURCES.txt -> panic-1.0/panic.egg-info
copying panic.egg-info/dependency_links.txt -> panic-1.0/panic.egg-info
copying panic.egg-info/top_level.txt -> panic-1.0/panic.egg-info
Writing panic-1.0/setup.cfg
Creating tar archive
removing 'panic-1.0' (and everything under it)

これで tar.gz ファイルが出来上がる。
このファイルを配布すれば、以下のように pip でインストール可能。

$ pip install panic-1.0.tar.gz

その他

Download Python for Other Platforms にて紹介されている

Python for iOS
Pythonista is a complete development environment for writing Python scripts on your iPad or iPhone.

気になったので購入。

Pythonista 3 - omz:software

試しに Flask とか描いてみたら普通に iPad ローカル上で動いちゃってますな。
面白そうだけど多機能過ぎて使いこなせるかは怪しい。しかし面白い