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 ...
その時の対応をメモとして残します。
環境
- Windows7 x64
- Python 3.5.1 32bit
c:\python35-32
にインストール
- pyodbc 3.0.10
- Visual Studio Community 2015
調査
PyPIを見たところ、Python3.4向けのものはありましたが、Python3.5向けのものは見当たりませんでした。
pyodbc 3.0.10 : Python Package Index
GitHubの公式では、ソースコードだけがあり、バイナリはありませんでした。
他には、非公式ですがWindowsバイナリを配布しているサイトがありました。
- pyodbc requires python 3.3 - Stack Overflow
- Python Extension Packages for Windows - Christoph Gohlke
ただ、せっかくなので、以下のサイトを参考に自分でビルド・インストールしてみます。
- Connecting to ODBC Databases from Python with pyodbc
- Building pyodbc from source · mkleehammer/pyodbc Wiki
ビルドのために、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が無い環境での作業
ビルドしたものを
- Python 3.5.1 32bitは、インストール済
- Visual Studio 2015は、未インストール
という別環境へインストールします。
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が無い環境
へインストールできました。