オレはこの OSS を Windows で使いたいだけなんじゃ@python

オレはこの OSS を Windows で使いたいだけなんじゃ@python

前置き

想像だけれど、結構前に書いた「Microsoft Visual C++ Compiler for Python 2.7はひとのためならず」と「setuptools最新はまだCythonのためならず」の需要の何割かは、PyPI – the Python Package Indexに登録されている等の OSS が「Windows 版」を提供していないことに「困っている」一群なのだと思っている。

ワタシは C/C++ プログラマでもあるので、「Microsoft Visual C++ Compiler for Python 2.7はひとのためならず」と「setuptools最新はまだCythonのためならず」には、Python そのものとは必ずしも関係ない動機も含まれていて、「オレはこの OSS を Windows で使いたいだけなんじゃ」というニーズには応えようとはしてなかった。

ので、いくつかの実例とともに「Windows 版がない」の御し方を、少しだけれど書いておこうと思う。

インストーラがいれば使えばいいんじゃない?

PyPI – the Python Package Indexに登録されている OSS では、Windows の標準的なインストーラが提供されているものが結構あるね。PostgreSQL クライアントの psycopgなどがそう。自分が使いたいターゲットに合う物があれば、使えばいい。

特に断りがない場合のやり方はいつでも一緒

Unix ユーザにとっての馬鹿の一つ覚え「./configure ; make ; sudo make install」と等価の Python バージョンがあって。「Windows 版がない!」とどよ~んとする必要などない。まずはこれをやってみてからだ、どよ~んとするのは:

1 me@host: ~$ python setup.py build
2 me@host: ~$ python setup.py install

経験的には、過半数以上は、「素のままの Python」でさえこれでインストール出来る。(あなたがよほど凝ったものばかり必要としない限り。)

ただし、よほど不親切な OSS でない限りはPyPI – the Python Package Indexに登録されている OSS は真っ先に標準インストール方法が書いてあるので、それを読むのが先決だとは思うけれど。

断りがある場合の何割かは setuptools と pip 関係

断りがあるか、もしくは、

1 me@host: ~$ python setup.py build
2 me@host: ~$ python setup.py install

が失敗するケースの何割かは、setuptoolspip かのどちらかへの依存に関するものである。これは Unix 系でも同じ。

Unix系では各OSSサイトの説明に従ってsetuptoolspipをインストールすればいい。だいたいの場合は、この2つは「真っ先に」インストールしておくのが吉である。

Windows の場合は、「Unofficial Windows Binaries for Python Extension Packages」に頼るのが良い。

2017-07-28追記: pip のアップグレード

pip が古いとインストール出来ないものが結構ある。BurntSushi/nfldb での説明や、ワタシが書いた Pillow の話 など参照のこと。

whlってなんだよ、困った困った…

「パッケージマネージャ」的なものの車輪の再発明率がいつだって高いことには、いい加減辟易しない? ワタシもそう。自覚してるからこんな名前なんだろうね(reinventing the wheel)。

Windows の場合は、前述の「Unofficial Windows Binaries for Python Extension Packages」に行って、pip を入手すれば、「ダウンロードした whl」をインストール出来ます。Cython の場合はこう:

1 me@host: ~$ pip install Cython‑0.22‑cp27‑none‑win_amd64.whl

Unofficial Windows Binaries for Python Extension Packages にあれば使えばいいんじゃない?

Unofficial Windows Binaries for Python Extension Packages」には、「Windows版」なんてものが先天的に不要なものまで提供されていたりもするので、ここにあるからといって「ここから入手しなければならない」というものでもない。

ただ、ここにあるものは自力で構築するのは大変なものも多く、非常に助かる。順番としてはやはり「公式バイナリにないならここ」と考えた方がいいと思う。

C/C++コンパイラがなくてはどうにもならないものたち

ここまで来てやっと「Microsoft Visual C++ Compiler for Python 2.7はひとのためならず」と「setuptools最新はまだCythonのためならず」の出番。(なお、ともに Python 2.7 のための情報なので、その他網羅的な情報は「Windows での Python 2.7/3.4 の拡張モジュールビルド環境」「Windowsで64bitコンパイラを使う」などを参照してください。)

Cython で書かれたものは C/C++ でコンパイルする必要があるので、一つだけ、以下4点において絶妙な例を:
1. CythonとCが使われている
2. Windows 版が提供されていない
3. Unofficial Windows Binaries for Python Extension Packagesが扱ってない
4. 改変不要で Microsoft Visual C++ Compiler for Python 2.7 でビルド可

この例として、Fuzzyがある。「pure Cython」なんてものはもとより存在しないけれど、仮に「pyx」「pydpxd」のみで書かれているものを「pure Cython」と呼ぶとするならば、Fuzzyは「pure Cython」ですらなく、移植性に意識的でない OSS ならビルドできなくてもおかしくないところだが、Fuzzyは大丈夫。

Microsoft Visual C++ Compiler for Python 2.7はひとのためならず」と「setuptools最新はまだCythonのためならず」の情報に従って環境を整えてあれば、これだけでインストール出来る:

1 me@host: ~$ python setup.py build
2 me@host: ~$ python setup.py install

Fuzzyは、英語にしか使えないけど音声の類似度を測る指標のためのライブラリで、例えばこんな風に使う:

 1 >>> import fuzzy
 2 >>> soundex = fuzzy.Soundex(4) # __init__ takes an int arg, for size of encoded.
 3 >>> print(soundex("ANK AIR"))
 4 A526
 5 >>> print(soundex("YOUNG AIR"))
 6 Y526
 7 >>> dmeta = fuzzy.DMetaphone()
 8 >>> print(dmeta("ANK AIR"))
 9 ['ANKR', None]
10 >>> print(dmeta("YOUNG AIR"))
11 ['ANKR', None]
12 >>> nysiis = fuzzy.nysiis
13 >>> print(nysiis("ANK AIR"))
14 ANCAR
15 >>> print(nysiis("YOUNG AIR"))
16 YANGAR

世のため人のため

「C/C++コンパイラがなくてはどうにもならないものたち」に該当するものを、例えば自分のチームに配布しなければならない、という状況を考える。この場合に、「チーム全員に Microsoft Visual C++ Compiler for Python 2.7 を入れさせる」必要はない。

一つだけそれを出来る環境を整えてしまえば、自分でインストーラを作れる。先のFuzzyはじめ、ほぼ全ての場合、これで作れる:

1 me@host: ~$ python setup.py bdist_wininst

または

1 me@host: ~$ python setup.py bdist --format=msi

setup.py のあるのと同じ場所に dist フォルダが出来、ここに作られたインストーラが出来上がる。