« BRIAN OKKEN氏のWhy Most Unit Testing is Wasteを読む。 | トップページ | WinPython(64ビット版)でwxPython3.0とpy2exeをインストールしてみた。 »

2014年8月11日 (月)

64ビット環境のポータブルなPython(WinPython)用にCエクステンションをビルドしてみた。

ポータブルな64ビットのPythonディストーションWinPythonを使う

最近は64ビット環境へ移行する必要がいくつか出てきたので、

  • Python3.4 64-bitでGUIプログラミングしてみる。
  • Python3.4 64-bitでnumpyなどインストール。
  • なんて記事を書きながらいろいろと調査していたりします。

    今回は、64ビット環境を構築するのにできるだけ楽をしようということで、WinPythonというディストーションを使ってみました。

    Winpython_title1

    WinPythonは、Python(x,y)をつくっている二人のメイン開発者のうちの一人Pierre Raybautさんがやっているみたいですが、彼が普段メインでつかう32ビットのC:\Python27の方に影響がないようなUSBメモリで持ち歩けるポータブルな64ビット版のPythonが欲しいと思って作ったみたいで、今回の用途にまさにうってつけです。

    WinPythonのお陰で、64ビット用にコンパイルするのが非常に難しいnumpy/scipyを含めてIPython,Spyder,xlrd,VTKなど約80程のライブラリが一気にインストールされるので、楽ちんです。

    しかし、今回こまったのはtiffファイルの読み込みに便利なtifffile.pyというライブラリ。PyPIにもなかったりするライブラリですが、16ビットなTIFFファイルを読むのがPILなんかにくらべて大変早いので、重宝しています。

    ただし、インストールには付属のtifffile.cというCエクステンションを自分でビルドしないといけないのですが、64ビット環境では普通にGCCでビルドできずに、ちょっと手こずったので記事にしておきます。

    Cエクステンションをビルドするには

    python setup.py build_ext --inline

    をしてやる必要がありますが、このときのpythonがシステムにパスが通っている方じゃなくってWinPythonの方のPythonをつかって欲しいので、WinPythonが用意したコンソールをつかってこのコマンドを実行します。

    私は、WinPythonをCドライブに直にインストールしたので、パスは

    C:\WinPython-64bit-2.7.6.4

    という感じで、ここにいろいろとEXEの形のランチャーがありますが、WinPython Command Prompt.EXEがWinPython用のコンソールのランチャーになります。

    これを使ってコンソールを立ち上げて、それからtifffile.py、setup.py、tifffile.cが入ったソースコードのフォルダにいきます。ちなみにsetup.pyはファイルとして配布されていないので、

    from distutils.core import setup, Extension
    import numpy
    setup(name='_tifffile',
          ext_modules=[Extension('_tifffile', ['tifffile.c'],
                                 include_dirs=[numpy.get_include()])])
    

    という内容でつくれと、cのソースコードの方にあるとおりにつくります。

    で、このコンソールからソースコードのあるフォルダに移動して、python setup.py build_ext --inlineしてみると、vcvarsall.batが見つからないとか怒られるので-c mingw32をつけて

    python setup.py build_ext -c mingw32 --inline

    とするととっても長いエラーで最後

    error: command 'gcc' failed with exit status 1

    になるので、どうやら32ビットのGCCではコンパイルできない模様。

    追記)よく考えたらGCCはシステムのパスに通っているものが使われていたはずなので、単にGCCが64ビット版じゃなかっただけかも。Mingw-w64を使えばよかったのか。

    追記2) 後日別PCがでanacondaの64ビットPython3.4.4で試したところ、libpythonをconda install libpythonしておけばあとは、pip install tifffileとするだけでちゃんとバージョン0.8がインストールできた。Python35にはlibpythonが配布されてないのでPython35ではおそらくTheanoのインストールでやったように手動でlibmsvcr140.aとlibpython35.aをgendefとdlltoolで作成しないとだめだろう。

    Microsoft Visual C++ Express Edition 2008をインストール

    Victor JaburさんのBlogポストを参考にMicrosoft Visual C++ Express Edition 2008をインストールしてみると、いきなりステップ1.1がリンク切れで躓く。

    stackoverflowの質問Visual C++ 2008 Express Download Link Dead? [closed]の回答にMicrosoft Visual C++ 2008 Express with SP1へのリンクがあり、助かった。

    もしかしたらMicrosoft Visual C++ Compiler for Python 2.7でも良いかもしれない。

    あとは1.9まで従って変更する。

    いよいよWinPythonのコンソールから

    python setup.py build_ext -c msvc --inline

    で、ビルドできた。しかし、なぜか

    python setup.py install

    してもWinPythonのPythonではインポートが失敗するので、tifffile.pyと_tifffile.pydを

    C:\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\Lib

    へ手作業でコピーしたらうまく行った。

    « BRIAN OKKEN氏のWhy Most Unit Testing is Wasteを読む。 | トップページ | WinPython(64ビット版)でwxPython3.0とpy2exeをインストールしてみた。 »

    Python」カテゴリの記事

    パソコン・インターネット」カテゴリの記事

    コメント

    コメントを書く

    コメントは記事投稿者が公開するまで表示されません。

    (ウェブ上には掲載しません)

    トラックバック

    この記事のトラックバックURL:
    http://app.f.cocolog-nifty.com/t/trackback/1169291/57049025

    この記事へのトラックバック一覧です: 64ビット環境のポータブルなPython(WinPython)用にCエクステンションをビルドしてみた。:

    « BRIAN OKKEN氏のWhy Most Unit Testing is Wasteを読む。 | トップページ | WinPython(64ビット版)でwxPython3.0とpy2exeをインストールしてみた。 »

    広告欄


    やっつけタイムライン

    広告欄

    はてブ

    人目の訪問です。

    • follow us in feedly

      かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

      ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






      Jenny Mayhem
    2017年9月
              1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30

    IT技術注目記事

    無料ブログはココログ