Windowsのpython3.5.1にwxPython-Phoenixを入れようとして少し詰まった話

2016年3月2日水曜日

python

t f B! P L
pip isntall ごにょごにょで入らなかったり、入ったと思ったらDLL load failedしたりした。
結論としては

  1. pipのバージョンが7.1.2だったのが悪いのでpipとvirtualenvは最新にする。
  2. とりあえずvisual studio community 2015を入れる。

でなんとかなった。
以下頑張ってググった話をごちゃごちゃと書く。




pipでインストールを試みる

wxPython-Phoenixはhttp://wxpython.org/Phoenix/snapshot-builds/からインストールすることになっているのでREADME.txtを見てインストールします。

pip install --pre --trusted-host wxpython.org -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix

Failed building wheel for wxPython-Phoenixという文字列を含む長いログが出てだめだった。
そもそも.whlじゃなくて.tar.gzをダウンロードしてくるあたりですでに怪しい。

じゃあwhlを直接ダウンロードしてインストールすればいいんじゃないか。ということでcp35でwin32_amd64なwhlをダウンロードしてpip install。だめだった。

wxPython_Phoenix-3.0.3.dev1927+e07098d-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.

そういえばnoneじゃなくてcp35mになっている。
おもむろにコマンドプロンプト上でpythonと打って

>>> import pip
>>> pip.pep425tags.get_supported()
[('cp35', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ('cp35', 'none', 'any'), ('cp3', 'none', 'any'), ('cp34', 'none', 'any'), ('cp33', 'none', 'any'), ('cp32', 'none', 'any'), ('cp31', 'none', 'any'), ('cp30', 'none', 'any'), ('py35', 'none', 'any'), ('py3', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]

確かにだめっぽい。

インストールに成功するまで

ググるとpipのバージョンを上げろと書いてあったのでpip install --upgrade pipする。

>>> import pip
>>> pip.pep425tags.get_supported()
[('cp35', 'cp35m', 'win_amd64'), ('cp35', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ('cp35', 'none', 'any'), ('cp3', 'none', 'any'), ('cp34', 'none', 'any'), ('cp33', 'none', 'any'), ('cp32', 'none', 'any'), ('cp31', 'none', 'any'), ('cp30', 'none', 'any'), ('py35', 'none', 'any'), ('py3', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]

いけそう。virtualenv _venvして_venv\Scripts\activate.batしてもう一度インストール。だめだった。
virtualenvして現れたpipのバージョンが古かったのでvirtualenvもアップデートする。
再度インストール

pip install --pre --trusted-host wxpython.org -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix

pip freeze
wheel==0.29.0
wxPython-Phoenix==3.0.3.dev1943+fdf739f

できた。


Dll load failedと戦う

>>> import wx
省略
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

ファッ!?
from _core import *のあたりがだめらしい。

ググるとVisual Studio Community 2015を入れたら動いたという人を見かけた。
インストールしてみるとVisual C++ 20xx Redistributableを入れたりしていたので多分この辺の問題なのかな。

Hello World的なウィンドウ

>>> import wx
>>> app = wx.App()
>>> frame = wx.Frame(None, -1, 'wxtest.py')
>>> frame.Show()
True
>>> app.MainLoop()



よいぞ。


dumpbinのこと

VS入れるのはやりすぎ感すごいんだけどVSを入れることによってdumpbinが使えるようになる。
合ってるかわからないがこんな感じ。

dumpbin /dependents _core.cp35-win_amd64.pyd
Microsoft (R) COFF/PE Dumper Version 14.00.23506.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file _core.cp35-win_amd64.pyd

File Type: DLL

  Image has the following dependencies:

    wxbase30u_vc140_x64.dll
    wxbase30u_net_vc140_x64.dll
    wxmsw30u_core_vc140_x64.dll
    KERNEL32.dll
    python35.dll
    MSVCP140.dll
    VCRUNTIME140.dll
    api-ms-win-crt-heap-l1-1-0.dll
    api-ms-win-crt-time-l1-1-0.dll
    api-ms-win-crt-math-l1-1-0.dll
    api-ms-win-crt-runtime-l1-1-0.dll

  Summary

      13B000 .data
        1000 .gfids
       40000 .pdata
      107000 .rdata
       23000 .reloc
        6000 .rsrc
      2F4000 .text


とりあえずVC++2015再配布可能パッケージを入れてみるとよいかもしれない。

QooQ