OpenSSLをRUBYで使うのは割と簡単です。普通に[require ‘openssl’]と書けば使えるようになりますから。Pythonでも同じかと思ったらそうでもなく,pyOpenSSLというパッケージをインストールする必要があるみたいです。そこでpyOpenSSLをWindows10にインストールしてみました。
インストールに利用したWindows10にはPython3.5とOpenSSL 1.0.2gが入っています。
OpenSSLなどをはじめ,オープンソースプロジェクトの場合,Windows用のインストーラパッケージを提供していることが多いのですが,pyOpenSSLの場合は,Python3.5に対応したインストーラパッケージは存在しませんでした。(ひょっとしたらあるのかもしれませんが,私が検索した範囲では見つけられませんでした)
ちなみに,Python3.2までベースのpyOpenSSLのインストーラパッケージはこちらにありました。
https://pypi.python.org/pypi/pyOpenSSL/0.13.1
2016年5月5日現在のpyOpenSSLのバージョンは16.0.0なので少し古いかもしれません。0.13.1のWindowsインストーラパッケージがリリースされたのが,2013年9月4日です。2年半で0.13から16.0まで進化するとも思えないので,リリースノートを見てみました。
2015年4月14日に0.15がリリースされていて,その次が16.0ですので,先頭のゼロを取ってしまったようです。詳しい経緯は知りませんが。。。
どうせなら最新版のインストールにチャレンジしようということで,やってみました。
1.pyOnenSSLを入手する
pyOpenSSLのサイトhttps://pypi.python.org/pypi/pyOpenSSL/16.0.0からソース一式をダウンロードしてきます。
2.ReadMeを読む
Pythonのラッパーモジュールを利用するのは初めてなので,一応ReadMeを読んでみました。pyOpenSSLを解凍したフォルダに「README.rst」や「INSTALL.rst」があります。
これを読むと,pyOpenSSLをインストールするには,次のコマンドを実行するように書いています。
$ pip install pyopenssl
pipはPythonのパッケージ管理システムで,Pythonをインストールすると,自動的に入るみたいです。実際にコマンドプロンプトで[pip]と入力すると,こんな感じでusage画面が出力されます。
> pip Usage: pip <command> [options] Commands: install Install packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. search Search PyPI for packages. wheel Build wheels from your requirements. help Show help for commands. General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. --log <path> Path to a verbose appending log. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries> Maximum number of retries each connection should attempt (default 5 times). --timeout <sec> Set the socket timeout (default 15 seconds). --exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup. --trusted-host <hostname> Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path> Path to alternate CA bundle. --client-cert <path> Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir> Store the cache data in <dir>. --no-cache-dir Disable the cache. --disable-pip-version-check Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
3.インストールする
それではpipコマンドを入力してpyOpenSSLをインストールしてみます。
C:\Users\hogehoge>pip install pyopenssl Collecting pyopenssl Downloading pyOpenSSL-16.0.0-py2.py3-none-any.whl (45kB) 100% |################################| 45kB 485kB/s Collecting six>=1.5.2 (from pyopenssl) Downloading six-1.10.0-py2.py3-none-any.whl Collecting cryptography>=1.3 (from pyopenssl) Downloading cryptography-1.3.2-cp35-none-win32.whl (891kB) 100% |################################| 892kB 222kB/s Collecting pyasn1>=0.1.8 (from cryptography>=1.3->pyopenssl) Downloading pyasn1-0.1.9-py2.py3-none-any.whl Requirement already satisfied (use --upgrade to upgrade): setuptools>=11.3 in c:\users\hogehoge\appdata\local\programs\python\python35-32\lib\site-packages (from cryptography>=1.3->pyopenssl) Collecting idna>=2.0 (from cryptography>=1.3->pyopenssl) Downloading idna-2.1-py2.py3-none-any.whl (54kB) 100% |################################| 57kB 353kB/s Collecting cffi>=1.4.1 (from cryptography>=1.3->pyopenssl) Downloading cffi-1.6.0-cp35-none-win32.whl (145kB) 100% |################################| 147kB 409kB/s Collecting pycparser (from cffi>=1.4.1->cryptography>=1.3->pyopenssl) Downloading pycparser-2.14.tar.gz (223kB) 100% |################################| 225kB 406kB/s Installing collected packages: six, pyasn1, idna, pycparser, cffi, cryptography, pyopenssl Running setup.py install for pycparser Successfully installed cffi-1.6.0 cryptography-1.3.2 idna-2.1 pyasn1-0.1.9 pycparser-2.14 pyopenssl-16.0.0 six-1.10.0 You are using pip version 7.1.2, however version 8.1.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
うまくインストールできたようです。画面の最後に,pipのバージョンが古いと警告が出ていたので,ついでにバージョンアップしました。
4.pyOpenSSLの動作を確認する
無事にインストールできかどうか,pyOpenSSLをインポートして確認してみます。
>>> import OpenSSL >>>
大成功!!
Pythonのモジュールはpipコマンドでインストールすることができます。オープンソースの場合,自分でビルドする必要があるなど,少しハードルが高いケースがありますが,今回はそんなに難しくありませんでした。