« デイビッド・ビーズリーのユニットテストで魚が死んだ話。 | トップページ | ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。 »

2016年1月 4日 (月)

ウィンドウズ版のPythonでメモリに困った場合の対処法

3230008811

のんびりしているエンジニアの日記の「Pythonで少なくメモリを使用する方法」に触発されてわたしも書いてみます。

私自身、仕事でPythonで画像処理とかよくするのですが、そうするとMemoryErrorをくらっちゃうことが多々あります。

基本的には「のんびりしているエンジニアの日記」にあるような対処をして、ピークメモリが減るようにリファクターとかしてしのいでますが、どうしてもピークメモリすらウィンドウズでPythonのインスタンスに割り当てられる限界の2GBを突破してしまい、OSが64ビットだろうが、PCに16GBのメモリをつんでいようが2GBに達した時点でMemoryErrorを食らいます。

Windows 7は64ビットだからといって安心してはいけません。ウィンドウズは32ビットのプログラムにメモリを出し渋る仕様なのです。がーーーん・・・。

これは64bitのPythonに移行するのがめんどいので、私の環境がいまだにpython.exeが32bitなためで、64ビットのPythonを使えば別にそれでOKです。

ただ、色々な事情で32ビットのPythonを使い続けている人もまだけっこういるとおもわれます。

そんな場合でも実はマイクロソフトから配布されているEDITBINというコマンドラインツールを使って、2GBの限界を突破して、おそらく32bitの限界の4GBまで?いけるようになります(Pythonのバグトラッカーをみると限界は3GBみたいですね)。

やり方

EDITBINは「Microsoft Visual C++ 2008 Express Edition」に付属するツールなのでまずこれをインストールします。

つぎに「C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin」にあるeditbin.exeを発見します。

つぎに以下のコマンドを実行します。普通のCMDでもいいですが、Microsoft Visual Studio Command Promptを使うとeditbin.exeにパスが通っているのでらくです。

editbin /LARGEADDRESSAWARE "C:\Python27\python.exe"

として、Pyhonのインタプリターの実行ファイルのフラグを書き換えます。

これだけで、ウィンドウズOSがPythonに割り当てるメモリが増えますので、2GBの壁を突破できるわけです。これはPythonに限らず一般的に使える方法ですので、Rubyとかゲームソフトとかにも応用できるとおもいます。

editbinのオプションはこちらのmsdnサイトを参考にしてください。

まあさっさと64bitに移行すればいいだけなんですけどねぇ。。サードパーティーライブラリーも十分対応済みなのでぜんぜん可能だと思うんですが、数年前からの遺産の蓄積があるので腰が重いです。

Linuxならこんなこと心配する必要ないですけどね。。

« デイビッド・ビーズリーのユニットテストで魚が死んだ話。 | トップページ | ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。 »

Python」カテゴリの記事

コメント

コメントを書く

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

トラックバック


この記事へのトラックバック一覧です: ウィンドウズ版のPythonでメモリに困った場合の対処法:

« デイビッド・ビーズリーのユニットテストで魚が死んだ話。 | トップページ | ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。 »

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
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 31        

はてブ

無料ブログはココログ