Python3.5向けに、pyodbcをビルド・インストールする

Python3.5にpyodbcをpipでインストールしようとしたところ、以下のエラーが出てインストールできませんでした。

(env) >pip install pyodbc
...
  running bdist_wheel
  running build
  running build_ext
  building 'pyodbc' extension
  error: Unable to find vcvarsall.bat
...

 
その時の対応をメモとして残します。

 

環境

 

調査

PyPIを見たところ、Python3.4向けのものはありましたが、Python3.5向けのものは見当たりませんでした。
pyodbc 3.0.10 : Python Package Index

 
GitHubの公式では、ソースコードだけがあり、バイナリはありませんでした。

 
他には、非公式ですがWindowsバイナリを配布しているサイトがありました。

 
ただ、せっかくなので、以下のサイトを参考に自分でビルド・インストールしてみます。

 

ビルドのために、Visual C++ 2015用の共通ツールをインストール

pip install時のエラー内容から、vcvarsall.batが必要そうでした。

どこで入手できるかを調べてみたところ、Python3.5版はVisual Studio Community 2015のCommon Tools for Visual C++ 2015(日本語ではVisual C++ 2015用の共通ツール)が必要そうでした。
vcvarsall.bat needed for python to compile missing from visual studio 2015 ( v 14) - Stack Overflow

 
手元のVisual Studio Community 2015のメディアからインストーラーを起動します。

起動後、変更から機能 > プログラミング言語 > Visual C++ > Visual C++ 2015用の共通ツール にチェックを入れ、インストールしました。

 

pipによるインストール

再度PyPIからインストールしようとしましたが、エラーとなりました。

(env) >pip install pyodbc
...
ValueError: path '/Users/mkleehammer/dev/pyodbc/src/buffer.cpp' cannot be absolute

 
そこで、GitHubのreleasesにある3.0.10ソースコードを使ったところ、無事にインストールできました。

# インストール
(env) >pip install https://github.com/mkleehammer/pyodbc/archive/3.0.10.zip
...
Successfully installed pyodbc-3.0.0-unsupported

# 確認
(env) >pip list
pip (6.1.1)
pyodbc (3.0.0-unsupported)
setuptools (15.0)

 

手元でビルドし、他の環境で配付・インストール

上記でpip + Visual Studio 2015を使ってインストールすることができました。

ただ、Visual Studio 2015が無い環境で使うということも考えられます。
Visual Studio 2015 のシステム要件

そこで、Visual Studioがある環境でビルドし、別環境へインストールするのを試してみます。

 

Visual Stuidoがある環境での作業
ビルド

GitHubからバージョン3.0.10ソースコードをcloneし、ビルドします。

# Tag 3.0.10を指定してclone
(env) >git clone https://github.com/mkleehammer/pyodbc.git -b 3.0.10

(env) >cd pyodbc

# ビルド
(env) \pyodbc>python setup.py build
running build
running build_ext
...
   ライブラリ build\temp.win32-3.5\Release\path\to\pyodbc\src\pyodbc.cp35-win32.lib とオブジェクト build\temp.win32-3.5\Release\path\to\pyodbc\src\pyodbc.cp35-win32.exp を作成中
コード生成しています。
コード生成が終了しました。

 

Visual Studioが無い環境での作業

ビルドしたものを

という別環境へインストールします。

 

virtualenv環境の構築
>virtualenv -p c:\python35-32\python.exe env

>env\Scripts\activate

(env) >mkdir pyodbc_libs

(env) >cd pyodbc_libs

 

ビルド端末から必要なモノをコピー

今回はpyodbc_libsフォルダに、ビルドした端末から

  • 2フォルダ
    • build
    • src
  • 1ファイル
    • setup.py

をコピーします。

 

インストール

python setup.py installでvirtualenv環境にインストールします。

# フォルダ/ファイルの確認
(env) pyodbc_libs>dir /b
build
setup.py
src

# インストール
(env) pyodbc_libs>python setup.py install
...
Installed path\to\env\lib\site-packages\pyodbc-3.0.0_unsupported-py3.5-win32.egg
Processing dependencies for pyodbc===3.0.0-unsupported
Finished processing dependencies for pyodbc===3.0.0-unsupported

# インストール結果の確認
(env) pyodbc_libs>pip list
pip (8.1.1)
pyodbc (3.0.0-unsupported)
setuptools (20.3.1)
wheel (0.29.0)

# Pythonのバージョン確認
(env) pyodbc_libs>python --version
Python 3.5.1

# グローバルにはインストールされていないことを確認
(env) pyodbc_libs>deactivate
pyodbc_libs>pip list
pip (7.1.2)
setuptools (18.2)
virtualenv (15.0.1)

 
以上で、Python 3.5.1 + pyodbc 3.0.10を、

  • Visual Studio2015がある環境
  • Visual Studio2015が無い環境

へインストールできました。