继续在ServerFault上研究这个问题的解决方案:
https://serverfault.com/questions/221203/mercurial-hook-fails-on-windows
我发现了一个有趣且有点令人不安的事情:我的机器上似乎有三个不同版本的Python(如果算上“官方”版本,那么就有四个版本似乎没有带有它的DLL ......)。这是我文件搜索工具的镜头:
更多信息:
我怀疑这是上述问题中我的问题的根源,但我想我会在这里问,因为这是特别的问题是Python的交易。
我试图互相替换这两个DLL,但是当我使用Mercurial附带的DLL时,TortoiseHg就会停止工作。
在我看来,我的机器上应该只有一个“Python”。我如何实现这一目标?
答案 0 :(得分:2)
对于前面提到的问题,mercurial包安装在mercurial home下的python中,但是你正在C:\ python26下执行脚本。所以你需要在mercurial python
下安装和执行你的脚本正如前面提到的那样,在同一台机器上安装多个python家庭是完全可以的,但是你在安装python库时要注意确保你在正确的家中,这意味着你在调用python之前设置了正确的路径。
答案 1 :(得分:1)
我认为tortoise / mercurial刚刚嵌入了他们自己的python版本来做他们需要做的事情。
我不担心它,DLL不会互相攻击 - PATH是Windows搜索查找DLL的最后一个。
请参阅:http://msdn.microsoft.com/en-us/library/7d83bc18(v=vs.80).aspx
答案 2 :(得分:1)
附注:“C:\ Python26”中的Python安装将其DLL安装到Windows目录,在您的情况下为“C:\ Windows \ SysWOW64”。
回答您的服务器故障问题:当您将Mercurial安装为独立版本时,您必须将钩子访问的任何软件包放入Mercurial的库文件夹(如果有的话,也可以是“library.zip”)。 / p>
我建议您卸载Mercurial独立版本,然后使用pip
安装Mercurial。这使得更新变得更容易,您可以将普通的“site-packages”目录用于普通的Python库和hg钩子。
答案 3 :(得分:0)
每个DLL都适用于该应用程序。您的搜索路径中只有一个,因此您无需担心冲突。
是不是有效的东西会让你担心这个?
您认为应该只有一个是错误的,每个应用程序都捆绑了一个具有固定API的特定版本,您不能只是放弃另一个并希望它能够正常工作。
答案 4 :(得分:0)
Python DLL命名结构仅提供主要版本和修订号。您可能正在查看版本2.6.1,2.6.4,2.6.5和2.6.6的DLL。
只要每个应用程序都包含自己的python26.dll
副本,所有这一切都无关紧要。如果存在文件的本地副本,Windows将不会浏览PATH
环境变量。