#language ja この記事はWindowsInstall(2008-01-03 10:30:16)の翻訳です。 '''注:''' BinaryPackagesからWindows用のパッケージ版の方がよいでしょう。 Windows環境でMercurialをソースからインストールするために、次のものが必要です * Pythonインタープリタ([[http://www.python.org|python.org]]からもしくは[[http://www.activestate.com/Products/ActivePython/|ActivePython]]) * Cコンパイラ([[Mercurial]]によって使われる拡張機能をコンパイルするために必要で、Mercurialに対してはセットアップするときのみ必要で実行するためには必要ありません) * Mercurial自身のソース * 3つの方法のMergeProgramのうちどれか [[http://www.python.org|python.org]]のPythonを使う場合、[[http://sourceforge.net/project/showfiles.php?group_id=78018&package_id=79063|win32 APIの拡張]]によって{{{clone}}}コマンドを使うときに大きなパフォーマンスの違いを見ることなります(but see the caveats below about hardlinks on Windows)。Python 2.4を使っている場合、[[http://starship.python.net/crew/mhammond/win32/Downloads.html|mfc71.dll]]も必要です。(これらの拡張は既に[[http://www.activestate.com/Products/ActivePython/|ActivePython]]の一部として搭載されていますが、Active``Python は完全なオープンソースではありません。) Merucurial実行ファイルとインストーラをビルドするインストラクションに関してはBuildingWindowsInstallerをご覧下さい。 ------- このページではMercurialをインストールしようとするときに遭遇するであろう問題とその解決方法を説明しています。 通常は、ソース内のディレクトリで次のコマンドを実行するだけで {{{ python setup.py install --force }}} とりあえずすべてがうまくいきます。{{{-f/--force}}}スイッチを使うことで古いインストレーションが上書きされることが確認されます。 == 他のWindowsのTips == <> === Mercurialはどこに? === デフォルトで、Mercurial(実行ファイル)はPythonインストレーションフォルダ内の{{{Scripts}}}フォルダにインストールされます。 Mercurialの起動を手助けするためにパス上にあるフォルダ(例えばWindowsインストレーションフォルダ)に小さなバッチファイルを作ることができます。 9x系のWindows(Windows 95, 98 or ME)を動かしている場合、次の内容を含む{{{hg.bat}}}ファイルを作成します: {{{ @echo off shift python \hg %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 }}} 例えば、Pythonを{{{c:\python}}}にインストールした場合、ファイルの内容は次のようになります {{{ @echo off shift python c:\python\hg %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 }}} Windows NT環境では、次の内容を持つ{{{hg.cmd}}}ファイルを作ります: {{{ @python \hg %* }}} 例えば、Pythonを{{{c:\python}}}にインストールした場合、ファイルの内容は次のようになります {{{ @python c:\python\Scripts\hg %* }}} あることに対してよりベターに動作する代わりのスキーマはPATH上のhgを探すことです。hg.exeを使う場合、よく動作します。hgのPythonバージョンに対してyou should be able to simply rename 'hg'を'hg.py'にリネームして.py拡張子を設定すれば呼び出されるようになります。呼び出されますが、XPにおいて、長い時間のリダイレクションバグがあり、実行の形式を失った状態でexitしてしまう問題が時々起こります。ですので次のバッチファイルが解決方法です -- これをPATH上に設置すれば、PATHにある.py拡張子無しで'hg'を見つけ適切に呼び出します: (ファイル名は'''hg.cmd''') {{{ @echo off for /f %%i in ("hg") DO set HGSCRIPT="%%~$PATH:i" if %HGSCRIPT% == "" ( echo Cannot find hg on PATH exit /b 1 ) python %HGSCRIPT% %* }}} === PythonとMingW32 === デフォルトでは、PythonとActive``Pythonは拡張をコンパイルするためにMicrosoft Visual Cを探すので、Ming``W32コンパイラを使うように{{setup.py}}に伝える必要があります。次のコマンドを通して実行できます。 {{{ python setup.py build --force -c mingw32 python setup.py install --force --skip-build }}} もしくはより手短に: {{{ python setup.py build -f -c mingw32 install -f }}} mingw32に慣れていないのであれば、次の順番で以下のパッケージをダウンロードしてインストールする必要があります: {{{ msys.exe msysDTK.exe }}} 後で、次のパッケージをダウンロードとインストールします。インストールするディレクトリはmsysパッケージがインストールしたディレクトリです (すなわち{{{c:\msys\1.0\}}}) {{{ MinGW.exe }}} http://www.mingw.org で見つかります PythonとmingwのディレクトリをPATHに追加し、コマンドプロンプトからビルドを実行します: {{{ set PATH=%PATH%;c:\python24;c:\msys\1.0\mingw\bin }}} Mercurialバージョン0.9.2でコンパイラエラーに遭遇する場合、PYTHONPATH\libsにlibpython24.aが必要なことがあります。その場合、次のコマンドが必要です: {{{ pexports C:\WINDOWS\system32\python24.dll > python24.def dlltool --dllname C:\WINDOWS\system32\python24.dll --def python24.def --output-lib C:\Python24\libs\libpython24.a }}} これで上記のsetup.pyスクリプトは適切に動作します。 === Cygwinを利用してより簡単にMingW32ベースのビルドをする === 一つのグラフィカルインストーラがあるのでCygwinからMinGW32をインストールする方が簡単です。Cygwinインストーラ({{{setup.exe}}})を通してmngw32をインストールした後で、Cygwinのbinディレクトリをパスに追加しmingw32のビルドのインストラクションにしたがって下さい。次は例です。 {{{ set PATH=%PATH%;c:\python24;c:\cygwin\bin python setup.py build --force -c mingw32 python setup.py install --force --skip-build }}} === ActivePythonとMS Visual C === MS Visual Cを使っている場合、Active``Pythonの適切なバージョンをインストールする必要があります: * Active``Python 2.4.1はVC7.1を必要とします * Active``Python 2.3.5はVC6がを必要とします バージョン確認のためのあまり理想的ではない次善策はMSVC Pythonがビルドされたdistutilsのノーションを変更することです。実際のMSVCのバージョンにマッチするようにpython/Lib/distutilsディレクトリのmsvccompiler.pyファイルを編集してこれを行います。例です: {{{ def __init__ (self, verbose=0, dry_run=0, force=0): CCompiler.__init__ (self, verbose, dry_run, force) self.__version = get_build_version() + self.__version = 6 # override build version to match compiler }}} 環境でシェルを使う上記の代わりの方法は既にコンパイルするためにセットアップしているので、distutilsにパス内の利用できる実行ファイルを信用するように伝えます: {{{ set DISTUTILS_USE_SDK=1 }}} この方法で、筆者はVisual Studio 2005を使いActive``Python 2.4.2とActive``Python 2.5.1に対してhgのビルドを成功しました。 === Windows/x64とPython 2.5 === pywin32はまだWindows/x64のプラットフォームにポートされていないことに注意して下さい。 ==== python.orgディストリビューションとMSプラットフォームSDKコンパイラ ==== python.orgの[[http://www.python.org/ftp/python/2.5/python-2.5.amd64.msi|python-2.5.amd64.msi]]を利用する場合、Platform SDKコンパイラを利用してMercurialをコンパイルできます (筆者はMicrosoft Platform SDK for Windows Server 2003 R2を利用しました)。 一つのcatchがあります: `python setup.py build`を実行した場合、次のようなエラーが表示されます: {{{ ... AttributeError: MSVCCompiler instance has no attribute '_MSVCCompiler__root' }}} このエラーを防止するために、秘訣はDISTUTILS_USE_SDK環境変数をsetすることです。 Visual Studio 2005が実際に手元にあり、上記のトリックを使う場合、拡張機能をビルドできますが、それらはロードされません: {{{ ... ImportError: DLL load failed with error code 193 }}} もしくは似たようなエラーがあります`abort: could not import module found.!`. 修正方法はmanifestファイルを.pydモジュールに埋め込むことです: {{{ # (assuming you're in a cygwin bash shell) $ python setup.py build_ext $ cd build/lib.win32-2.5/mercurial $ for pyd in *.pyd; do mt.exe -nologo -outputresource:$pyd\;2 -manifest $pyd.manifest; done $ cd ../../.. $ python setup.py install }}} ==== ActiveState Python 2.5 ==== 上記の状況と変わらないようです。 === その他の問題 === .tarファイルから展開しているときにWin``Zip7は空のファイルを作らないようです。しかしWin``Zip9は立派に動作します。 Mercurialの初期のバージョンはglobパターンでチルダを取り扱うにも問題がありました。この問題に遭遇したらアップグレードして下さい。 ==== SSHプロトコルを利用する ==== 3つの解決方法があります: * CygwinとOpenSSHをインストールしSSHが自動的にPATHに設定されるCygwinシェルを使います * Install [[http://www.chiark.greenend.org.uk/~sgtatham/putty/|PuTTY]] and follow the instructions in [[http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks#head-728e29f739157fd04e05843a07c87b3a2027f973|TipsAndTricks]]. * CygwinとOpenSSHをインストールしてCygwinにインストールしたSSH実行ファイルを呼び出すためにMercurial.iniを修正します。 次のエントリを追加するためにMercurial.iniを編集して下さい: {{{ [ui] ssh = C:\cygwin\bin\ssh.exe }}} === Windows上のパス問題を修正する === 例えば、mercurialのソースに取り組むなど、'mercurial'サブディレクトリを持つディレクトリ内でhgを使おうとすると、 pythonMercurialに必要なバイナリモジュールをロードできないことがあり、次のようなスタックトレースが表示されます: {{{ ... File "C:\projects\hg\mercurial\demandload.py", line 54, in module return object.__getattribute__(self, 'importer').module() File "C:\projects\hg\mercurial\demandload.py", line 30, in module self.fromlist) File "C:\projects\hg\mercurial\mdiff.py", line 9, in ? import struct, bdiff, util, mpatch ImportError: No module named bdiff }}} メーリングリストの"Fix the path problem on Windows..."というものがありますが、必然的にWindows上のPythonはsiteライブラリの'''前に'''python検索パスに自動的に追加された現在のディレクトリで終わります。 独自のリポジトリでhgを実行する場合pythonは混乱し、必要な拡張を見つけることができません。現在のディレクトリを除去するcandidateパスが存在しますが、K.Thananchayanの次善策がおそらくベターです。レジトストリエントリを追加するだけです(2.4をPythonのバージョンに置き換えて下さい) {{{ HKLM/SOFTWARE/Python/PythonCore/2.4/PythonPath/XXX (Default) REG_SZ "YYY" }}} === Windows上でハードリンクする === Mercurialは現在Windows上のハードリンクのcloneのサポートを含んでいます。 しかしながらこれを動かすためには、ファイルシステムがそれらをサポートする必要があり(すなわちNTFS)上記で言及された{{{win32}}} APIの拡張が必要です。ファイルシステムがハードリンクをサポートしないもしくは{{{win32file}}}モジュールを持たない場合でも、mercurialのcloneはとりあえず動作しますが - 当然のことながらハードリンクの恩恵を受けません。 0.7以前のMercurialのバージョンに対して、Mercurialはハードリンクを'break'しなければならないことを理解しません。 要点はハードリンクでcloneした場合それらでMercurialのpre-0.7バージョンを使ってはならない(ソースもしくは目的のcloneのどちらか)、もしくは{{{win32file}}}無しのPythonのバージョンを使うことです。そのようにする場合、だめになるでしょう。 ハードリンクをbreakするシンプルな解決方法は(xcopyもしくはFile Explorerを使って)リポジトリの一つをコピーし、cloneを削除することです。後でコピーして元に戻します。 === デフォルトのエディタ === コメントメッセージのデフォルトのエディターは'vi'です。Windowsインストーラはnotepadに設定するmercurial.iniを作ります。プリファレンスを指定するためにEDITOR (もしくはHGEDITOR)環境変数を設定する、もしくはmercurial.iniで設定できます: {{{ [ui] editor = whatever }}} ---- ---- CategoryJapanese