8

这些是我采取的步骤:

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

(编辑:我忘了补充所有这些步骤都在这里列出。)

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

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

找不到什么DLL?

4

5 回答 5

7

你错过了 mercurial 的 c 库

有 3 种方法可以摆脱这种情况

  1. 最近的 mercurial 版本附带纯 python 实现,您可以在 mercurial/pure 中找到
  2. 自己编译(我不确定步骤,在任何 unix 上都可以)
  3. 从网站上获取 win32 安装程序
    请注意,我还没有查看它们是如何构建的
    (您需要基于 distutils 的安装,而不是基于 py2exe 的安装)
于 2009-03-14T20:29:32.910 回答
3

第一件事:不要为此使用 TortoiseHg。请改用 Mercurial 安装程序。

(TortoiseHg 尝试尽可能独立于您的 Python 安装,并且由于这个 Python 新手不清楚的原因,事情不工作。关于 py2exe 的一些东西。)

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

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

[web]
style = foo
于 2009-03-16T14:45:34.157 回答
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 无法在站点包中加载 DLL。

我解决了如下问题:

  1. 更改 hgwebdir.wsgi 以禁用需求导入:

from mercurial import demandimport; demandimport.disable()

  1. 创建一个纯的(仅 .py,没有编译的 .pyd)mercurial 包并安装。另请参阅https://www.mercurial-scm.org/wiki/WindowsInstall

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.
于 2011-06-16T20:11:51.957 回答
1

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

我确定我在 Python 配置 (2.5.4) 中遗漏了一些明显的东西,但我遇到了 .pyd 与 .dll 的问题。(我在使用 Python 颠覆库时遇到了同样的问题。)我在 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 中,但在此之后我可以成功执行:from mercurial import osutil. 还要记住将 Templates 目录复制或移动到新解压缩的库目录中。

其余部分按照HgWebDirStepByStep的第 5 节中的步骤进行。不过,我没有遇到第 5.3 节中的“陷阱”。

于 2009-10-20T05:43:39.653 回答
0

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

于 2011-10-12T05:18:31.463 回答