この記事はWindowsInstall(2008-01-03 10:30:16)の翻訳です。

注: BinaryPackagesからWindows用のパッケージ版の方がよいでしょう。

Windows環境でMercurialをソースからインストールするために、次のものが必要です

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

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コンパイラを使うように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を使っている場合、ActivePythonの適切なバージョンをインストールする必要があります:

バージョン確認のためのあまり理想的ではない次善策は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つの解決方法があります:

次のエントリを追加するために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

JapaneseWindowsInstall (last edited 2009-05-19 19:31:05 by localhost)