Python 是字符串'@LIBDIR@';莫名其妙的魔法?

Python 是字符串'@LIBDIR@';莫名其妙的魔法?,python,mercurial,Python,Mercurial,出于某种原因,我看了看,看到了一段奇怪的代码: libdir = '@LIBDIR@' if libdir != '@' 'LIBDIR' '@': ... if语句看起来像重言式/矛盾句,因为在Python中,'@LIBDIR@'应该始终等于'@LIBDIR'@',所以代码永远不会运行。在什么条件下,“@LIBDIR@”会变成其他东西? setup/hg:始终从安装Mercurial的位置加载它 这提供了两个新功能: Mercurial可以安装到非标准位置,而无需设置PYTHON

出于某种原因,我看了看,看到了一段奇怪的代码:

libdir = '@LIBDIR@'

if libdir != '@' 'LIBDIR' '@':
    ...
if语句看起来像重言式/矛盾句,因为在Python中,
'@LIBDIR@'
应该始终等于
'@LIBDIR'@'
,所以代码永远不会运行。在什么条件下,
“@LIBDIR@”
会变成其他东西?

setup/hg:始终从安装Mercurial的位置加载它

这提供了两个新功能:

  • Mercurial可以安装到非标准位置,而无需设置PYTHONPATH
  • 多个安装可以从不同的位置使用Mercurial

我想你可以通过电子邮件向Dan索取更详细的答案

我对Mercurial本身并不熟悉,但对我来说,
@LIBDIR@
显然是为了通过自动搜索和替换来替换其他字符串,比如在安装脚本中。
if
语句检查是否确实执行了此操作:搜索不会在
@“LIBDIR”
中找到
@LIBDIR@
,因此这是一种将变量值与其原始占位符值进行比较的方法,而不会触发
if
语句中占位符的替换

换句话说,
if
语句询问:“如果在安装时指定了库路径,则验证它并将其添加到Python模块搜索路径。”


我个人会将这些信息放在一个配置文件中,因为这样用户更容易编辑,也不太可能被更新所破坏,但Mercurial似乎正在使用源代码搜索方法进行配置。

您的分析是正确的。它可能是为了调试或快速更改代码。@Veedrac可能是这样,但有些调试代码在发布版本中似乎很奇怪。也许这样,工具可以搜索“@LIBDIR@”(sed、grep等),并在必要时替换它。@NickT:占位符被安装Mercurial的路径替换为
setup.py
。目标是避免让
$PYTHONPATH
影响Mercurial加载的库。