ウィンドウズ版のPythonでメモリに困った場合の対処法
のんびりしているエンジニアの日記の「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」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« デイビッド・ビーズリーのユニットテストで魚が死んだ話。 | トップページ | ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。 »
コメント