この記事はWindowsInstall(2008-01-03 10:30:16)の翻訳です。
注: BinaryPackagesからWindows用のパッケージ版の方がよいでしょう。
Windows環境でMercurialをソースからインストールするために、次のものが必要です
Pythonインタープリタ(python.orgからもしくはActivePython)
Cコンパイラ(Mercurialによって使われる拡張機能をコンパイルするために必要で、Mercurialに対してはセットアップするときのみ必要で実行するためには必要ありません)
- Mercurial自身のソース
3つの方法のMergeProgramのうちどれか
python.orgのPythonを使う場合、win32 APIの拡張によってcloneコマンドを使うときに大きなパフォーマンスの違いを見ることなります(but see the caveats below about hardlinks on Windows)。Python 2.4を使っている場合、mfc71.dllも必要です。(これらの拡張は既にActivePythonの一部として搭載されていますが、ActivePython は完全なオープンソースではありません。)
Merucurial実行ファイルとインストーラをビルドするインストラクションに関してはBuildingWindowsInstallerをご覧下さい。
このページではMercurialをインストールしようとするときに遭遇するであろう問題とその解決方法を説明しています。
通常は、ソース内のディレクトリで次のコマンドを実行するだけで
python setup.py install --force
とりあえずすべてがうまくいきます。-f/--forceスイッチを使うことで古いインストレーションが上書きされることが確認されます。
他のWindowsのTips
Contents
Mercurialはどこに?
デフォルトで、Mercurial(実行ファイル)はPythonインストレーションフォルダ内のScriptsフォルダにインストールされます。
Mercurialの起動を手助けするためにパス上にあるフォルダ(例えばWindowsインストレーションフォルダ)に小さなバッチファイルを作ることができます。
9x系のWindows(Windows 95, 98 or ME)を動かしている場合、次の内容を含むhg.batファイルを作成します:
@echo off shift python <path-to-Scripts-folder>\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 <path-to-Scripts-folder>\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とActivePythonは拡張をコンパイルするためにMicrosoft Visual Cを探すので、MingW32コンパイラを使うようにに伝える必要があります。次のコマンドを通して実行できます。
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を使っている場合、ActivePythonの適切なバージョンをインストールする必要があります:
ActivePython 2.4.1はVC7.1を必要とします
ActivePython 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を使いActivePython 2.4.2とActivePython 2.5.1に対してhgのビルドを成功しました。
Windows/x64とPython 2.5
pywin32はまだWindows/x64のプラットフォームにポートされていないことに注意して下さい。
python.orgディストリビューションとMSプラットフォームSDKコンパイラ
python.orgの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ファイルから展開しているときにWinZip7は空のファイルを作らないようです。しかしWinZip9は立派に動作します。
Mercurialの初期のバージョンはglobパターンでチルダを取り扱うにも問題がありました。この問題に遭遇したらアップグレードして下さい。
SSHプロトコルを利用する
3つの解決方法があります:
- CygwinとOpenSSHをインストールしSSHが自動的にPATHに設定されるCygwinシェルを使います
Install PuTTY and follow the instructions in 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