Regen Techlog

Web・プログラミングの技術メモ

「Unable to find vcvarsall.bat」の対処法

      2017/07/02

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindows環境下でインストールしようとすると「Unable to find vcvarsall.bat」とエラーがでることがあります。

Pythonパッケージにビルドが必要なファイル(pure Python以外のC/C++など)が指定されている場合はインストール時にコンパイルが必要ですが、Windows環境ではデフォルトでPython本体をコンパイルしたVC++と同じバージョンのVC++を呼ぼうとします。そのため、Python本体をコンパイルしたバージョンのVC++がないとエラーになります。

2014-07-05: VC++、Windows SDKの情報を追加しました。
2014-09-28: Express Edition、9.0のvcvarsall.batの情報を追加しました。
2014-11-28: Visual C++ Compiler for Python 2.7の情報を追加しました。
2017-07-02: Visual Studio Dev Essentialsへリンクを修正しました。

VC++のバージョンの確認

Python本体をコンパイルしたVC++のバージョンはインタラクティブシェルを起動した時やsys.versionで確認できます。

>>> import sys
>>> sys.version
'2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)]'

このとき「MSC v.AAB0」のAA部がメジャーバージョン+6、B部がマイナーバージョン*10を表しています。MSC v.1500なら、メジャーバージョンが15-6=9、マイナーバージョンが0/10=.0、つまりVC++9.0(VC++2008)でPython本体がコンパイルされたことがわかります。

VC++の製品ごとのバージョンはWikipediaに一覧表があります。

対処法

VC++がインストールされていない場合は、まずVC++をインストールしましょう。Python本体をコンパイルしたバージョン同じVC++をインストールすれば追加の設定は必要ありません。

Python 2.7の場合

MicrosoftがPython 2.7用のコンパクトなVC++ 9.0コンパイラMicrosoft Visual C++ Compiler for Python 2.7を配布しています。インストール場所は、%LOCALAPPDATA%\Programs\Common\Microsoft\Visual C++ for Python9.0になります。

VC++ for Python 2.7を使う場合はsetuptoolsのバージョン6以上が必要です。古い場合は以下のコマンドでアップデートが必要です。

pip install -U setuptools

Python 2.7以外の場合または通常のVC++が必要な場合

Visual Studio(有料)、Visual Studio Express Edition(無料)、Windows SDK(無料)から入手可能です。各バージョンのVisual Studio Express EditionのダウンロードはVisual Studio Dev Essentialsで提供されています。

IDEは不要でコンパイラのみでよいという人にはWindows SDKからの入手が最適です。

VC++ 9.0(2008)の注意点

Visual Studio(Express Edition)に含まれるvcvarsall.batはx64環境でのツールへのパスが間違っており、「ValueError: [u’path’]」というエラーが出ることがあります。また、Windows SDK 7.0に含まれるVC++ 9.0(2008)にはvcvarsall.batが付属していないという問題があります。ただし、Visual C++ Compiler for Python 2.7の場合は問題ありません。

問題がある場合、パスを修正したvcvarsall.batをVC++のインストールディレクトリ(デフォルトではC:Program Files (x86)Microsoft Visual Studio 9.0VC)においてください。

別バージョンのVC++を使う設定

もし、Python本体をコンパイルしたバージョンと違うVC++がインストールされている場合はそちらを使うように設定をすることで無事にコンパイルできるようになります。

実際にパッケージのビルド時にVC++を呼び出しているコードはpython_install_dir/Lib/distutils/msvc9compliler.pyにあり、Python本体をコンパイルしたVC++がインストールされている場所をレジストリやVS*COMNTOOLS環境変数を使って調べています。つまり、VS*COMNTOOLS環境変数で別のバージョンのVC++を指定してあげると、そちらを使ってコンパイルをしてくれます。

例えば、Python本体がMSC v.1500、つまりVC++9.0(2008)でコンパイルされていてインストールされているVC++が11.0(2012)の場合、

set VS90COMNTOOLS=%VS110COMNTOOLS%

と環境変数をセットしてやるとVC++11.0を使ってコンパイルしてくれます。

 - プログラミング ,

コメントを残す

  関連記事

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

WindowsでPython Netifacesをインストールする

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたので …

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

Suspend on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL …

Python小ネタ

Pythonの意外と知られていない小ネタを紹介します。

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …

VC++9.0でOpenMP使用時の注意点

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバー …

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoup4やlxm …

Pythonで簡単にWindowsサービスを作る

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Window …

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …