如何让Mercurial的hgwebdir在Windows上运行?

时间:2009-03-13 19:45:38

标签: mercurial tortoisehg

这是我采取的步骤:

  • 安装apache 2.2.x
  • 安装TortoiseHg 0.7
  • 将hgwebdir.cgi,hgweb.config复制到cgi-bin
  • 根据需要编辑hgweb.config
  • 解压缩$ blah \ TortoiseHg \ library.zip解压缩$ blah \ TortoiseHg \ library
  • sys.path.append(“$ blah \ TortoiseHg \ library”)的开头 hgwebdir.cgi
  • 将$ blah \ TortoiseHg \ templates移至$ blah \ TortoiseHg \ library \ templates

(编辑:我忘了添加所有这些步骤here

当我运行http://localhost/cgi-bin/hgwebdir.cgi/时,我可以看到我的存储库。如果我尝试浏览该存储库,我会被告知“DLL加载失败:无法找到指定的模块。”。回溯的最后一行在__load()中显示“c:\ program files \ apache group \ apache \ cgi-bin \ mercurial \ osutil.pyc”。

我读过有关pywintypes25.dll问题的人;它位于“c:\ program files \ tortoisehg”中,已经在我的PATH中。

找不到什么DLL?

5 个答案:

答案 0 :(得分:7)

你错过了mercurial的c libs

有三种方法可以摆脱这个

  1. 最近的mercurial版本附带了纯粹的python实现,你可以在mercurial / pure
  2. 中找到
  3. 自己编译(我不完全确定步骤,在任何unix上都可以正常工作)
  4. the website抓取win32安装程序 请注意,我还没有看看这些是如何构建的 (您需要基于distutils的安装,而不是基于py2exe的安装)

答案 1 :(得分:4)

首先:不要使用TortoiseHg。请改用Mercurial安装程序。

(TortoiseHg尝试尽可能独立于你的Python安装,并且由于这个Python新手不清楚的原因,事情不起作用。关于py2exe的事情。)

否则,只需按照HgWebDirStepByStep中的步骤操作即可。我确实必须安装pywintypes,但是YMMV。最后,该页面上提到的解压缩实用程序可能会对文件权限做一些奇怪的事情:我必须向Templates目录及其文件/子目录添加读取权限。

顺便说一句,如果您想知道如何设置样式,请将其添加到hgweb.config:

[web]
style = foo

答案 2 :(得分:2)

我的设置涉及apache 2.2.17,mod_wsgi 3.3,python 2.7.2,trac 0.12.2,mercurial 1.8.4。两个问题浮出水面:

  1. mercurial demandimport初始化顺序
  2. mercurial无法在site-packages中加载DLL。
  3. 我解决了以下问题:

    1. 更改hgwebdir.wsgi以禁用demandimport:
    2. from mercurial import demandimport; demandimport.disable()

      1. 创建一个纯的(仅限.py,没有编译的.pyd)mercurial包并安装。另请参阅https://www.mercurial-scm.org/wiki/WindowsInstall
      2. E:\Dist\mercurial-1.8.4>setup.py --pure build
        E:\Dist\mercurial-1.8.4>setup.py --pure install

        已编译的版本(使用Microsoft Visual Studio 2008)无法加载DLL:

        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24] mod_wsgi (pid=6092): Exception occurred processing WSGI script 'D:/Home/web/apache/cgi-bin/hgwebdir.wsgi'.
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24] Traceback (most recent call last):
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "D:/Home/web/apache/cgi-bin/hgwebdir.wsgi", line 9, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     from mercurial.hgweb.hgwebdir_mod import hgwebdir
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "C:\\Apps\\Python27\\lib\\site-packages\\mercurial\\hgweb\\__init__.py", line 10, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     import hgweb_mod, hgwebdir_mod
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "C:\\Apps\\Python27\\lib\\site-packages\\mercurial\\hgweb\\hgweb_mod.py", line 10, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     from mercurial import ui, hg, hook, error, encoding, templater
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "C:\\Apps\\Python27\\lib\\site-packages\\mercurial\\ui.py", line 10, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     import config, util, error
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "C:\\Apps\\Python27\\lib\\site-packages\\mercurial\\config.py", line 9, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     import error, util
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]   File "C:\\Apps\\Python27\\lib\\site-packages\\mercurial\\util.py", line 17, in <module>
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24]     import error, osutil, encoding
        [Thu Jun 16 21:46:28 2011] [error] [client 192.168.178.24] ImportError: DLL load failed: The specified module could not be found.
        

答案 3 :(得分:1)

我知道这个问题已经得到解答,但我遇到了一个稍微不同的问题并找到了解决方法 -

我确信我在Python配置中遗漏了一些明显的东西(2.5.4),但我遇到了.pyd与.dll的问题。 (我在Python subversion库中遇到了同样的问题。)我在Mercurial \ library.zip中看到了osutil.pyd,但无法加载它。因此,我解压缩了library.zip,然后将* .pyd复制到* .dll,例如:

REM Ugly DOS... Recursively renames all .pyd files to .dll
for /f "tokens=*" %%a in ('dir /s /b *.pyd') do copy "%%a" "%%~da%%~pa%%~na.dll"

确保解压缩的库目录在PYTHONPATH中,但在此之后我成功执行:来自mercurial import osutil。还要记得将Templates目录复制或移动到新解压缩的库目录。

其余部分请按照HgWebDirStepByStep第5部分中的步骤操作。虽然我没有在第5.3节中体验过“陷阱”。

答案 4 :(得分:0)

对于那些正在寻找分步教程以在Windows上使用TortoiseHg和Apache的人,我在这里写了一篇:http://makinggames.ca/dev/version-control-mercurial-apache-tortoisehg/