หมายเหตุ: คุณอาจจะอยากใช้แพคเกจพร้อมใช้งานสำหรับวินโดวส์ที่ BinaryPackages มากกว่า!

ในการติดตั้ง Mercurial จากซอร์สโค้ดในวินโดวส์ คุณจะต้องมี

ถ้าคุณใช้ไพธอนจาก python.org คุณสามารถทำให้คำสั่ง clone ของ Mercurial เร็วขึ้นได้มากถ้าคุณติดตั้ง win32 API extensions ด้วย (แต่ลองดูหมายเหตุเพิ่มเติมด้านล่างเกี่ยวกับ hardlinks ในวินโดวส์นะ) ถ้าคุณใช้ไพธอน 2.4 คุณจะต้องมี mfc71.dll ด้วย (extensions เหล่านี้เป็นส่วนนึงของ ActivePython อยู่แล้วแต่ว่าโปรแกรม ActivePython ไม่ใช่โปรแกรมแบบโอเพนซอร์สทั้งหมด)

ลองดู BuildingWindowsInstaller สำหรับขั้นตอนในการสร้างตัวติดตั้งของ Mercurial หน้า BuildingOnWindows ก็มีคำแนะนำเพิ่มเติมในการ build Mercurial ในวินโดวส์


หน้านี้อธิบายปัญหาที่คุณอาจเจอระหว่างการติดตั้ง Mercurial และวิธีแก้ปัญหาเหล่านี้

การติดตั้งแบบง่ายที่สุดก็คือคุณแค่่ต้องใช้คำสั่ง

python setup.py install --force

ในไดเร็คทอรี่ที่คุณเก็บซอร์สโค้ด แล้วทุกอย่างก็จะ"ทำงานได้" ตัวเลือก -f/--force เป็นการทำให้แน่ใจว่าโปรแกรมที่เคยติดตั้งไว้แล้วจะถูกแทนที่ด้วยโปรแกรมเวอร์ชั่นใหม่

สารบัญ

คำแนะนำในการ build

MingW32

การ build โดยใช้ MingW32

โดยปกติไพฑอนและ ActivePython จะหาโปรแกรม Microsoft Visual C เพื่อคอมไพล์ extensions ต่างๆ เพราะฉะนั้นคุณจะต้องบอก setup.py ให้ใช้ compiler ของ 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

จากนั้นให้เพิ่มไดเร็คทอรี่ของไพธอนและ mingw ไว้ในตัวแปร PATH และพิมพ์คำสั่งสำหรับ build ในคอมมานด์พร๊อมต์:

set PATH=%PATH%;c:\python24;c:\msys\1.0\mingw\bin

ถ้าคุณพบข้อผิดพลาดในการคอมไพล์ใน Mercurial เวอร์ชั่น 0.9.2 ขึ้นไป คุณอาจจะต้องใช้ libpython24.a ใน PYTHONPATH\libs ในกรณีนี้คุณต้อง:

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 จะทำงานได้ตามปกติ

วิธี build แบบง่ายกว่าด้วย MingW32 ผ่าน Cygwin

คุณสามารถติดตั้ง MinGW32 ได้ง่ายกว่าผ่าน Cygwin เพราะว่ามันมีตัวติดตั้งแบบกราฟฟิค หลังจากติดตั้งโดยใช้โปรแกรม (setup.exe) ให้เพิ่มไดเร็คทอรี่ bin ของ cygwin เข้าไปใน path และทำตามขั้นตอนการ build สำหรับ mingw32 จากด้านบน เช่น

set PATH=%PATH%;c:\python24;c:\cygwin\bin
python setup.py build --force -c mingw32
python setup.py install --force --skip-build

MS Visual Studio

การ build โดยใช้ MSVC

ถ้าคุณจะใช้ MS Visual C เพื่อ build คุณจะต้องติดตั้งเวอร์ชั่นไพธอนท่เหมาะสมหรือใช้ ActivePython:

คุณสามารถ บังคับ ให้ไพธอนใช้คอมไพเลอร์ที่คุณมีอยู่แล้วถึงแม้ว่ามันจะไม่ตรงกันกับที่ได้ระบุไว้ก็ตาม

คุณจะต้องใช้ shell ที่มีการตั้งค่าตัวแปรต่างๆพร้อมสำหรับการคอมไพล์แล้ว จากนั้นจึงบอก distutils ว่ามันจะต้องเชื่อถือคอมไพเลอร์ที่อยู่ใน path:

set DISTUTILS_USE_SDK=1
set MSSdk=1

(ดูเอกสาร distutils msvc)

ถ้าคุณไม่ทำตามตัวอย่างข้างบนและรันคำสั่ง python setup.py build คุณอาจจะเจอข้อผิดพลาดแบบนี้:

...
AttributeError: MSVCCompiler instance has no attribute '_MSVCCompiler__root'

ปัญหาอื่นๆ: ถ้าคุณใช้ไพธอน 2.6 ลองดูบั๊ก at http://bugs.python.org/issue3741

เราสามารถใช้วิธีนี้เพื่อ build Mercurial สำหรับ ActivePython 2.4.2 และ ActivePython 2.5.1 บนแพลทฟอร์ม x86 และกับไพธอนจาก python.org เวอร์ชั่น 2.5 และ 2.6 บนแพลทฟอร์ม amd64 ด้วย Visual Studio 2005 (VC++ 8)

แต่ก่อนก็มีคนสามารถ build Mercurial โดยใช้ Platform SDK compiler (ของ Microsoft Platform SDK สำหรับ Windows Server 2003 R2)

อีกวิธีนึงสำหรับหลีกเลี่ยงปัญหาเรื่องเวอร์ชั่นคือเปลี่ยนค่าที่บอกว่าไพธอนของคุณถูก build ด้วยคอมไพเลอร์เวอร์ชั่นไหนเป็นเวอร์ชั่นที่ตรงกับคอมไพเลอร์ของคุณ โดยแก้ไขไฟล์ msvccompiler.py ในไดเร็คทอรี่ python/Lib/distutils เป็นเวอร์ชั่นของ MSVC ที่คุณมี เช่น:

   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

(Q: OK to delete the above alternative workaround? -- cboos)

หมายเหตุการใช้ MS VC++ 8

ถ้าคุณมี Visual Studio 2005 คุณน่าจะสามารถ build extension ต่างๆได้แต่ว่า extension เหล่านั้นจะไม่ถูกโหลดขึ้นมาใช้งานด้วยข้อผิดพลาด:

...
ImportError: DLL load failed with error code 193

หรือข้อผิดพลาดอื่นที่คล้ายๆกันเช่น abort: could not import module found.!

วิธีการแก้ไขก็คือให้ embed ไฟล์ .manifest เข้าไปในโมดูล .pyd:

# (สมมุติว่าคุณอยู่ใน bash shell ของ cygwin)
$ 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

คำแนะนำในการติดตั้ง

Where is my Mercurial?

โดยปกติ ไฟล์ของ Mercurial จะถูกติดตั้งในไดเร็คทอรี่ Scripts ของไดเร็คทอรี่ที่คุณติดตั้งไพธอน

คุณสามารถสร้าง batch file เล็กๆในไดเร็คทอรี่ที่อยู่ใน path (เช่นในไดเร็คทอรี่ Windows) เพื่อให้คุณใช้งาน Mercurial ได้

ถ้าคุณใช้วินโดวส์ 9x (วินโดวส์ 95, 98 หรือ ME) สร้างไฟล์ชื่อ hg.bat พร้อมเนื้อหานี้:

@echo off
shift
python <path-to-Scripts-folder>\hg %0 %1 %2 %3 %4 %5 %6 %7 %8 %9

ยกตัวอย่างเช่น ถ้าคุณติดตั้งไพธอนที่ 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 %*

ยกตัวอย่างเช่น ถ้าคุณติดตั้งไพธอนที่ c:\python เนื้อหาของไฟล์จะเป็น

@python c:\python\Scripts\hg %*

อีกวิธีที่อาจจะดีกว่าสำหรับบางคนก็คือให้หา Mercurial จากใน PATH เลย ถ้าคุณใช้ hg.exe วิธีนี้ก็โอเค แต่ถ้าคุณใช้ hg แบบที่เป็นไฟล์ไพธอนคุณจะต้องเปลี่ยนชื่อไฟล์จาก 'hg' เป็น 'hg.py' และถ้าคุณได้ตั้งค่าในวินโดว์ให้มองไฟล์ที่มีนามสกุล .py เป็นโปรแกรมวินโดวส์จะรัน Mercurial ให้ทันที แต่ถึงแม้ว่าวินโดวส์จะรันสคริปต์ไพธอนให้ คุณก็อาจเจอบั๊กเกี่ยวกับการทำ redirection ในวินโดวส์ซึ่งก็มีมานานแล้ว นอกจากนั้นในวินโดวส์ XP คุณอาจพบปัญหาเกี่ยวกับสถานะการจบโปรแกรมที่หายไปอีกด้วยถ้าคุณใช้งาน Mercurial แบบสคริปต์ไพธอน วิธีแก้ปัญหาก็คือใช้ batch file นี้ -- ให้ใส่ไฟล์นี้ไว้ในไดเร็คทอรี่ที่อยู่ใน PATH ของคุณและวินโดวส์จะหาโปรแกรม 'hg' โดยที่ไม่ต้องมีนามสกุล .py ใน PATH จากนั้นจึงจะรันสคริปต์ properly: (name the file 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% %*

อีกวิธีก็คือการเพิ่มนามสกุล .py ในตัวแปร PATHEXT ถ้าคุณได้ตั้งค่าให้ไฟล์ที่มีนามสกุล .py ทำงานได้ทันทีเมื่อมีการรันไฟล์นั้นๆการเพิ่มนามสกุลใน PATHEXT จะทำให้คุณสามารถรันสคริปต์ไพธอนได้โดยไม่ต้องลงท้ายด้วยนามสกุล .py ซึ่งก็สะดวกดี ตัวเลือกนี้ก็สามารถทำงานถึงแม้ว่าคุณจะใช้ UTF-8 ใน console ของวินโดวส์ (เช่น code page 65001) ซึ่งทำให้ไฟล์นามสกุล BAT และ CMD ทำงานไม่ได้

ปัญหาอื่นๆ

WinZip7 ไม่สร้างไฟล์เปล่าถ้าแตกจากไฟล์นามสกุล .tar แต่ WinZip9 ทำงานได้ตามปกติ

เวอร์ชั่นแรกๆของ Mercurial มีปัญหากับการใช้ตัวอักษร tildes ใน glob patterns บน windows อัพเกรด Mercurial ถ้าคุณพบปัญหานี้

การใช้งาน SSH protocol ในวินโดวส์

มี 3 วิธี:

แก้ไขไฟล์ Mercurial.ini ดังนี้:

[ui]
ssh = C:\cygwin\bin\ssh.exe

แก้ไขปัญหาเรื่อง path ในวินโดวส์

ถ้าคุณพยายามใช้ Mercurial ในไดเร็คทอรี่ที่มีไดเร็คทอรี่ย่อยที่ชื่อ 'mercurial' เช่นเวลาคุณทำงานกับซอร์สโค้ดของ Mercurial ไพธอนอาจจะไม่สามารถโหลดโมดูลที่ Mercurial ต้องการได้ และคุณอาจเจอ stack trace แบบนี้:

...
  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..." ต้นเหตุของปัญหาก็คือไพธอนในวินโดวส์จะเพิ่มไดเร็คทอรี่ปัจจุบันเข้าไปใน search path ของไพธอน ก่อน ไดเร็คทอรี่ที่เก็บไลบรารี่ต่างๆ ทำให้ไพธอนงงและไม่สามารถหา extension ที่ต้องการเจอเวลาคุณใช้ hg ใน repository ของตัวเอง มี patch ที่ลบไดเร็คทอรี่ปัจจุบันออกจาก path แต่ว่าก็มีวิธีแก้ที่ดีกว่าจาก K.Thananchayan นั่นก็คือแค่เพิ่มค่าในรีจิสทรี่ (เปลี่ยน 2.4 เป็นเวอร์ชั่นไพธอนของคุณ)

 HKLM/SOFTWARE/Python/PythonCore/2.4/PythonPath/XXX
   (Default) REG_SZ "YYY"

Mercurial now includes support for cloning with hardlinks on Windows. However for this to work, your filesystem needs to support them (i.e. NTFS) and you need the win32 API extensions documented above. If you have a filesystem that does not support hardlinks or don't have the win32file module from pywin32, mercurial clone will still work just fine - but you won't get the benefits of hardlinking of course. Note that pywin32 is only available for the Windows/x64 platform starting with Python 2.6.

For versions of Mercurial prior to 0.7, Mercurial won't realise that it has to 'break' hardlinks.

The upshot is that if you have repositories cloned with hardlinks you must not use pre-0.7 versions of mercurial on them (either the source or the destination clone), or use a version of python without win32file. If you do you are likely to get corruption.

A simple solution to break the hardlinks is to copy (using xcopy or File Explorer) one of the repositories, deleting the clone. Copying it back afterwards.

Default editor

The default editor for commit messages is 'vi'. The Windows installer creates a mercurial.ini that sets it to notepad. You can set the EDITOR (or HGEDITOR) environment variable to specify your preference or set it in mercurial.ini:

[ui]
editor = whatever


CategoryWindows

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