字符串'@ LIBDIR @'有点神奇吗?

时间:2013-10-28 21:27:28

标签: python mercurial

出于某种原因,我查看了/usr/bin/hg并看到了一些奇怪的代码:

libdir = '@LIBDIR@'

if libdir != '@' 'LIBDIR' '@':
    ...

if语句看起来像一个重言式/矛盾,因为'@LIBDIR@'在Python中总是等于'@' 'LIBDIR' '@',所以代码永远不会运行。 '@LIBDIR@'在什么条件下变成其他东西?

2 个答案:

答案 0 :(得分:3)

我不熟悉Mercurial 本身,,但对我来说@LIBDIR@显然是要通过自动搜索和替换替换其他字符串,例如在安装脚本中。 if语句会检查这是否已完成:搜索在@LIBDIR@中找不到'@' 'LIBDIR' '@',因此这是将变量的值与其进行比较的方法原始占位符值,而不会触发if语句中占位符的替换。

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

我个人将这些信息放在一个配置文件中,因为这对用户来说更容易编辑,并且不太可能被更新破坏,但看起来Mercurial正在使用源代码修改方法来配置。

答案 1 :(得分:2)

commit message

  

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

     

这提供了两个新功能:

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

我想你可以给Dan发电子邮件以获得更详细的答案