pip と wheel を windows でも使いこなす

  • 56
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

この投稿で作成する環境は https://bitbucket.org/toruuetani/venv_base で構築できる。
hg clone して cmd.bat を実行すると、 Fabric がインストールされた virtualenv 環境が構築される。

前提

windows PC で開発し、それを動作させるのは別の windows PC 。ただし、その PC はオフライン環境で動作する。

なぜ今頃 pip を使いだすのか

pip はバイナリからインストールできないから。
pure python でないパッケージはソースからコンパイルしないといけないが、 linux と違って windows には C コンパイラがないことが多いため、 そういうパッケージをインストールできない。そのため windows 向けにバイナリパッケージが用意されている(XXX-1.2.1.win32-py2.7.exe など)。このバイナリパッケージは easy_install なら問題なくインストールできるが、 pip ではインストールできない。
そのため pip がいくら進化しようと、 windows では easy_install 一択だった。

上記のような状況は wheel の登場により改善されてきている。 wheel フォーマットはバイナリも含められるため、特殊なパッケージ( pywin32, psycopg2, py2exeなど )を除いては、ほぼ pip だけで行けるようになっている。

2014/02/14 追記
-> ここで記述したが、 wininst2wheel でより easy_install から pip への移行が可能になっている。

モダンな環境構築

現在 virtualenv を使わない環境は考えられないので、当然使うことにする。

  • python 2.7.6
  • virtualenv 1.11.2
  • setuptools 2.1
  • pip 1.5.2
  • wheel 0.22.0

以下の説明では次のディレクトリを使う。

  • $ 作業ディレクトリ
  • VENV_DIR virualenv 環境の構築ディレクトリ $/tools/venv
  • WHEELHOUSE_DIR wheel 格納ディレクトリ $/tools/setup/wheelhouse

virtualenv 環境の構築

https://pypi.python.org/pypi/virtualenv/ から virtualenv-1.11.2.tar.gz をダウンロードして解凍すると、以下のようなファイルができるのでこれを使う。

  • virtualenv.py
  • virtualenv_support/pip-1.5.2-py2.py3-none-any.whl
  • virtualenv_support/setuptools-2.1-py2.py3-none-any.whl
python virtualenv.py %VENV_DIR%

これで easy_install, pip が使えるようになる。

wheel のインストール

https://pypi.python.org/pypi/wheel/ から wheel-0.22.0.tar.gz をダウンロードして使う。

pip install wheel-0.22.0.tar.gz

これで wheel フォーマットが使えるようになる。

wheel の作り方

慣習的に wheel は wheelhouse というディレクトリに格納するので、これに倣っておく。

pip wheel %PACKAGE_NAME% -w "%WHEELHOUSE_DIR%"

たとえば Fabric の wheel を作る場合は以下のようにする。

pip wheel Fabric -w "%WHEELHOUSE_DIR%"

そうすると依存関係を解決して wheel を作成してくれる。

  • ecdsa-0.10-py27-none-any.whl
  • paramiko-1.12.1-py27-none-any.whl
  • pycrypto-2.6.1-cp27-none-win32.whl
  • Fabric-1.8.1-py2.py3-none-any.whl

(注)現時点の pip には バグ があるため、 PyPI に登録されていると作成してくれない。したがって Fabric-1.8.1-py2.py3-none-any.whl のみ PyPI からダウンロードする。

wheel を使ったインストール

pip wheel は wheel を作るだけなので、 実際インストールするには pip install を使って

pip install "%WHEELHOUSE_DIR%\Fabric-1.8.1-py2.py3-none-any.whl"

のようにする。この状態で pip freeze すると現在インストールされているパッケージが表示される。

> pip freeze
Fabric==1.8.1
ecdsa==0.10
paramiko==1.12.1
pycrypto==2.6.1
wheel==0.22.0

pip には pip freeze の結果をもとにパッケージをインストールする仕組みがある。上記結果を requirements.txt として保存するとパッケージを一括でインストールできる。なお、 wheel を作成済みで PyPI を検索する必要はないため、 --no-index をつけておく。
ある程度パッケージが多くなったら、こちらの方法が便利だろう。

pip install -r requirements.txt -f "%WHEELHOUSE_DIR%" --no-index

まとめ

wheelhouse に格納した wheel があれば、オフライン環境でも環境は構築できる。現状ではまだ一部 easy_install に頼らざるを得ないが、十分実用的と言えるだろう。