为什么python27.dll不在Python安装文件夹中,而在Windows系统文件夹中?

4
http://bugs.python.org/issue22139所述,python27.dll被安装在Windows系统(例如我的情况下是C:\Windows\System32)文件夹中。
但我想知道为什么?为什么它不被安装在python.exe旁边,例如C:\Python27\?
我提出这个问题的原因是:我用python编写了一个mercurial钩子,我们的开发人员需要使用它来检查提交消息是否有效。它检查是否存在有效的JIRA问题编号等内容。为了防止所有开发人员都要自己安装python并手动安装所需模块(工作量很大且容易出错),我将python安装程序压缩并要求开发人员在本地解压缩。但是他们无法运行它,因为缺少python27.dll,或者更糟糕的是,他们已经安装了另一个次要版本的python,并且由于使用了错误的python27.dll而导致钩子失败。令人困惑。
如果我只是将python27.dll(正确的版本)添加到zip文件中,似乎一切都很好。那么,为什么不首先将其安装在那个位置?将其安装在C:\Windows\System32的优点是什么?
希望有人能向我解释一下!
提前感谢, Tallandtree。

很奇怪...它很容易就在python.exe所在的目录中。我刚刚检查了我的一个虚拟环境 - 这个dll也不在环境中,因此两个2.7.x版本的virtualenv可能会有同样的问题。 - tdelaney
Windows会在系统路径之前搜索包含python.exe的路径。我能想到的将其放入\windows\system32的唯一原因是其他程序可以直接使用该dll - tdelaney
@tdelaney,Python 3.5 alpha版本使用安装目录,即使是所有用户的安装也是如此。也许在最终版本中会有所改变。至少它安装到了%ProgramFiles%,这里有安全的ACLs,相比于使用C:\Python35。但我真的怀疑System32是出于安全考虑而被使用的,而是为了让嵌入式开发人员更容易地进行隐式链接,他们想要一个“系统”Python,即不必在注册表中查找路径来调用每个函数的LoadLibraryGetProcAddress - Eryk Sun
3个回答

1
我使用来自http://continuum.io的Anaconda Python发行版。他们将python27.dll放置在c:\anaconda旁边的python.exe中。该发行版也优越,因为您可以拥有多个Python环境,精确地安装所需的软件包,并轻松地在它们之间切换(http://conda.pydata.org/docs/using/envs.html)。您还可以获取其中一个环境的软件包列表并将其分发给其他人。
我建议使用这个Python发行版而不是来自python.org和Enthought的那个,因为存在这个问题。

0

.dll文件是相当特定于Windows的文件。我想你会有针对LINUX/UNIX特定的Python的共享对象(.so)文件吧?你说你的开发人员无法运行它,因为他们没有正确的DLL(即与他们的Python安装相关的DLL)。

此外,将其安装到System32的优点是它在默认路径中。另外,如果任何其他应用程序在内部使用Python并需要访问.dll文件,并且不引用您的Python目录,则它们可能会寻找一个“实际存在”的位置(我想说保证存在,但是......算了)。那个位置将是`C:/windows/Systems32'。


我们目前只在Windows上开发,尽管开发的代码可以在UX上运行。因此,优点是您不必将Python文件夹添加到路径环境变量中。但是,将其添加到Python文件夹中也没有任何问题吧?DLL首先在应用程序自己的文件夹中搜索。 - Tallandtree

0
我发现将python27.dll放入Python目录(如c:\ Python27或其他位置)可以正常工作。只要它在路径中,它似乎是有效的。我为“可移植”的Python安装程序执行了此操作。我可以复制安装目录到没有安装Python的Windows机器上,设置PATH以包含该目录,并运行Python,包括我在原始机器上使用pip install安装的所有库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接