Pythonビルド

最終更新:2013年06月10日 (月) 22時46分23秒

目次
 ・OpenCVビルド用のビルド
 ・普通にpythonをビルド
 ・プロジェクトビルドの失敗を個々に解決する
 ・依存ファイルに最新バージョンのものを使う

Note:
 ・オプションのプロジェクトをビルドした際に必要だった依存ファイルは,ビルド後必要ないのだろうか.

■OpenCVビルド用のビルド

-OpenCVビルドを考えている人へのまえがき

OpenCVのDebug版ビルド時にpython27_d.dllがないとエラーが出ます.また,配布されているビルド済みのものは32bitのものだけです.これらを得るためにはpythonをビルドするひつようがあります.
※ といっても,pythonでは普通デバッグ版,64bit版を使わないようです.OpenCvを32bit・Releaseでビルドする際には,配布されているpython27.dllがあればよく,python27_d.dllがないことで設定時等でエラー/メッセージが出るかもしれませんが,無視してよさそうです.
 → 参考:http://dsas.blog.klab.org/archives/51344779.html

-OpenCVビルド用に 32bit python27_d.dllをビルド

pythonのビルド自体は,ソース展開後PCbuildフォルダ内のpcbuild.slnから行えます.
それをmsvcで開き,プロジェクト"python"をビルドすると,PCbuildフォルダにpython27_d.dllができます.
できたpython27_d.dllはインストーラ版のフォルダ/libsにコピーすればよいです.

■普通にpythonをビルド

-ソリューションのビルド

pythonのビルドは,ソースファイルをダウンロードし,その中のPCbuild/pcbuild.slnから行えます.
VisualStudioのExpress版ではこのファイルを開く際にメッセージが出て,ソリューションエクスプローラに利用できないものが見られますがビルドに支障はありません.
msvcのどのバージョンで開くかというのは.slnファイルをメモ帳などで開き,冒頭2行を見て確認します.
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008

ソリューションをビルドすると依存関係などの理由からいくつか失敗すると思います.といっても,プロジェクトpython以外はオプションらしいので,必要に応じてビルドすればよさそうです(PCBuildのreadmeより記憶半分ですが).

ここからさらに,インストーラ版を作成するにはこちらを参考にするとよさそうです.
 → http://docs.python.jp/2/distutils/builtdist.html

参考:python3.xのビルドに関してですがおおむね同じ?
 → 公式:http://docs.python.org/devguide/setup.html

-ビルドの失敗

プロジェクトがいくつか失敗する原因は,依存関係などの理由からいくつかの失敗すると思います.
私は7つでした.いくつかエラーを抜粋しました.どれもファイルのパスが原因のようです.
このうちのいくつかは依存関係によるもので,必要なファイルをダウンロードすることにより解決します.
2>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\sqlite-3.6.21\sqlite3.c': No such file or directory
4>IOError: [Errno 2] No such file or directory: 'crypto\\buildinf_x86.h'
6>IOError: [Errno 2] No such file or directory: 'crypto\\buildinf_x86.h'
3>..\Modules\_tkinter.c(66) : fatal error C1083: include ファイルを開けません。'tcl.h': No such file or directory
5>c:\tools\python\python-2.7.5\modules\_sqlite\connection.h(33) : fatal error C1083: include ファイルを開けません。'sqlite3.h': No such file or directory

-依存ファイルのダウンロード

依存ファイルのダウンロードは次のようにバッチファイルを起動することでダウンロードできます.
ただし,あらかじめsubversionをインストールしておく必要があります.
 ※ Win32 Svn:http://subversion.apache.org/packages.html#windows
   → こちらを参考にしました:http://www.ne.jp/asahi/hishidama/home/tech/svn/install.html

バッチファイルの実行は,適切なフォルダ(PCbuild,Toolsのあるフォルダ)で行う必要があります.
これにより,適切な位置(PCbuild,Toolsのあるフォルダのひとつ上)に依存ファイルがダウンロードされます.
cd Python-2.7.5 
Tools\buildbot\external-common.bat

これで失敗が2つに減りました.
ここからは,個々に解決していきます.
人によって,出るエラーが異なるかも知れません.

■プロジェクトビルドの失敗を個々に解決する

-_hashlib 1つめ

まず,active perlをインストールします.これはopensslのビルドに必要です.
 → 注意 active perlです:http://www.perl.org/

プロジェクト_hashlibで次のようなエラーが出ました.
opensslのビルドでつまずいているようです.
3>------ ビルド開始: プロジェクト: _hashlib, 構成: Debug Win32 ------
3>ビルド前のイベントを実行しています...
2>Can not find a suitable PERL:
2> the following perl interpreters were found:
2>  C:\Perl\bin\perl.exe
2>  c:\perl\bin\perl.exe
2>  C:\perl\bin\perl.exe
2> None of these versions appear suitable for building OpenSSL
2> Please install ActivePerl and ensure it appears on your path
2>No Perl installation was found. Existing Makefiles are used.

エラー文で検索すると,エラーを吐いているファイルがあることが分かります.
 → http://svn.python.org/projects/python/trunk/PCbuild/build_ssl.py
そこで,PCbuild/build_ssl.pyを見て処理を追います.
次の一文がエラーの原因となっていました.os.popenはコマンドラインに書きだす関数です.
Windowsのコマンドラインでは''で囲んでも文字列として見てくれず,次の2行目として書きなおす必要がありました(+検索先のファイルでは訂正されていた?ので,そちらを使いました).
fh = os.popen('"%s" -e "use Win32;"' % perl)
fh = os.popen(perl + ' -e "use Win32;"')

-_hashlib 2つめ

2つ目のエラーです.
3>'nasm' は、内部コマンドまたは外部コマンド、
3>操作可能なプログラムまたはバッチ ファイルとして認識されていません。

opensslのビルドに必要なnasm.exeをダウンロードしてパスを通します.
もしも nasm.exe でなく nasmw.exe が必要な場合は,nasm.exeをコピー,nasmw.exeに名前を変更します.
pythonビルド後は,pathを削除しても大丈夫だと思っています.
 nasmのダウンロード(nasm-2.10.07.zip):http://www.nasm.us/
  → 参考:http://www.02.246.ne.jp/~torutk/cxx/openssl/install.html

これで,_hashlib のビルドは通ります.
残す一つのビルドもopensslによるものだったので,全てのプロジェクトのビルドが成功しました.
全て通ると気持ちいいものですね.

■依存ファイルに最新バージョンのものを使う

新しいバージョンの依存ファイルを用意しそこへパスを変更すれば,ビルドはおおむね通ると思います.
パスの設定は 例えばプロジェクト_sslであれば,次の場所から変更できます.
プロパティマネージャ > _ssl > Debug|Win32(必要に応じて違うものを) > pyd_d > pyproject
> ユーザーマクロ > opensslDir
 ※ プロパティマネージャは[表示(V)]から表示可能にしておき,ソリューションエクスプローラの場所のタブを変えることで表示できます.

-OpenSSL-1.0.1e

ソースファイルをダウンロード,ビルドしたものをopenssl-0.9.8yがあるフォルダに入れます.
 → openssl-1.0.1e.tar.gz:http://www.openssl.org/source/
 ※ tar.gzをlhaplusで解凍するには,デスクトップのショートカットにD&Dします(右クリックでは×).

ビルド方法はこちら.
 → opensslビルド

openssl-1.0.1eフォルダの中のout32dllをout32にリネームします.

opensslDirで設定されているパスを以下のように変えます.
$(externalsDir)\openssl-1.0.1e

ソリューションをビルドします.





最終更新:2013年06月10日 22:46