Python 3.4をWindows 7にインストールしました。パッケージ管理周りの情報が錯綜してややこしいので、自分で調べたことをメモしておきます。 Installation & Packaging Tutorial — Python Packaging User Guide documentation を大いに参考にしています。
numpyパッケージをpipでインストールするところで詰まって、ワークアラウンドで対処しています。これで本当に正しいのか保証できません。
インストール
Python公式から"Download Python 3.4.1"をクリック。インストーラーPython-3.4.1.msiがダウンロードされた。これはx86のインストーラらしい。64bit版が欲しい場合はPython Release Python 3.4.1 | Python.orgまで潜る。
インストーラを実行してインストール。デフォルトではC:\Python34にインストールされる。
パッケージ管理ソフト
C:\Python34\Scriptsを見ると、はじめから以下のexeが用意されている。
- easy_install.exe
- easy_install-3.4.exe
- pip.exe
- pip3.4.exe
- pip3.exe
easy_installもpipも両方パッケージ管理ソフトだが、最近ではpipを使うのが普通らしい。
diffをとると、easy_install.exeとeasy_install-3.4.exeはまったく同じバイナリだった。同様にpipで始まる3つのexeもすべて同じバイナリだった。
バージョンを調べると以下のように表示された。
C:\Python34\Scripts>easy_install --version setuptools 2.1 C:\Python34\Scripts>pip --version pip 1.5.6 from C:\Python34\lib\site-packages (python 3.4)
バーチャル環境の構築
pythonの関連パッケージを無防備にインストールしてしまうと、バージョン番号にまつわる地獄に引きずり込まれることになる。そこでバーチャル環境を作ってその中でパッケージをインストールするのが良い方法だといわれている。
バーチャル環境を作るためのコマンドにはvirtualenvとpyvenvがある。検索エンジンで多くヒットするのはvirtualenvだが、手動インストールが必要。pyvenvは、Python3.4ではデフォルトでC:\Python34\Tools\Scripts
にインストールされているので、ここではpyvenvを使う。
バーチャル環境を作るには、まず以下のコマンドを実行する。<DIR>
にはお好みのパスを入れる。例えば"C:\python_virtual_env"とでも入れる。
pyvenv.py <DIR>
次に、<DIR>/Scripts
に移動してactivate.batを実行する。するとプロンプトの表記が変わる。これでバーチャル環境に入れた。
C:\python_virtual_env\Scripts>activate.bat (python_virtual_env) C:\python_virtual_env\Scripts>
パッケージのインストール
ここからは好きなパッケージをバーチャル環境にインストールし放題。例えばwheelというパッケージを、pipを使って入れてみる。
(python_virtual_env) C:\python_virtual_env\Scripts>pip install wheel Downloading/unpacking wheel Installing collected packages: wheel Successfully installed wheel Cleaning up...
numpyのインストールではまる→対処
しかし、同じようにnumpyパッケージを入れようとしたら失敗してしまった。
... C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link.exe /nologo /INCREMENTAL:NO _configtest.obj /OUT:_configtest.exe /MANIFESTFILE:_configtest.exe.manifest Found executable C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link.exe mt.exe -nologo -manifest _configtest.exe.manifest -outputresource:_configtest.exe;1 Found executable C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe _configtest.exe.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK ~[ failure. removing: _configtest.c _configtest.obj Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\python_virtual_env\build\numpy\setup.py", line 239, in <module> setup_package() File "C:\python_virtual_env\build\numpy\setup.py", line 231, in setup_package setup(**metadata) File "C:\python_virtual_env\build\numpy\numpy\distutils\core.py", line 169, in setup (中略、大量のTracebackが続く) File "numpy\core\setup.py", line 682, in get_mathlib_info raise RuntimeError("Broken toolchain: cannot link a simple C program") RuntimeError: Broken toolchain: cannot link a simple C program ---------------------------------------- Cleaning up... ...
Visual Studio周りのツールで正しいツールが選択されずにエラーとなっているような雰囲気。あれこれ調べた結果、Visual Studio 2010のExpress版をインストールしていると失敗しやすいようだ(?)
Numpy-discussion - Compiling NumPy on Windows for Python 3.3 with MSVC 2010で回答されている通り、
Python34\Lib\distutils\msvc9compiler.py の648行目を `mfinfo = None` に変更
することで、一応エラーなしでnumpyのインストールができた。しかしこのワークアラウンドで問題がないのか不明。
matplotlibのインストールではまる→回避
これで完璧! と思いpip install matplotlibすると、またもやエラーで止まる。
c:\python_virtual_env\build\matplotlib\src\ft2font.h(16) : fatal error C1083: include ファイルを開けません。'ft2build.h': No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN\\cl.exe' failed with exit status 2
どうやら、ft2build.hという、FreeTypeライブラリで提供されるヘッダファイルがないとだめなようだ。これは別途OSにインストールしておく必要がある。pipは万能ではない…。
ここでとれる方法は大きく2つ。
- pipではなくeasy_installを使う
- Unofficial Windows Binaries for Python Extension Packagesからmatplotlib‑1.4.0.win32‑py3.4.exeをとってくる
- easy_install matplotlib‑1.4.0.win32‑py3.4.exe
- wheelを使う。参考:Can I install Python windows packages into virtualenvs? - Stack Overflow
- pip install wheel
- wheel convert matplotlib‑1.4.0.win32‑py3.4.exe
- pip install (生成される.whlファイル)
- 失敗する場合は pip を wheel に変える
どちらの方法でもうまくいくことを確かめた。しかしeasy_installは古いコマンドなので、下の方法がよいだろう。
ちなみにmatplotlibでは、公式で.whlが配布されていたことに後で気づいたので、上記のように「わざわざ非公式サイトからexeをDLしてwhlに変換」という手続きは不要であった。