如何在setuptools包中包含VCS信息

时间:2016-07-28 14:40:58

标签: python setuptools

我(尝试)使用setuptools来构建一个包。我试图使用版本号major.minor.mercurial_revision,但它抱怨:

The version specified ('1.0.7ae7970a82c1') is an invalid version, this may
not work as expected with newer versions of setuptools, pip, and PyPI.
Please see PEP 440 for more details.`

精细。所以我看看PEP 440,它说基本上说'#34;不要这样做":

As hashes cannot be ordered reliably such versions are not permitted in the
public version field. As with semantic versioning, the public  .devN  
suffix may be used to uniquely identify such releases for publication, 
while the original DVCS based label can be stored in the project metadata. 

我理解这里的逻辑。但如何我如何在项目元数据中包含hg修订版?我找不到setup.py:setup()的参数可以包含的任何(最新)文档,但我发现的here似乎没有提供一个字段的distutils对此。

2 个答案:

答案 0 :(得分:0)

如何将它作为Python代码中的属性包含在内?

echo '__revision__ = $HG_HASH' > mypackage/revision.py

安装完成后,您可以:

from mypackage.revision import __revision__
print 'build from', __revision__

或者您可以将其写入文件,并通过MANIFEST.in将其包含在源文件中。

你甚至可以直接将它包含在setup()的参数中,这似乎只是忽略了未知的关键字参数:

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='gward@python.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
      revision='7ae7970a82c1',
     )

这不会被记录在任何地方,但如果有人需要知道调试信息或其他内容,它总是可以通过检查获得。因为这依赖于setup()忽略未知的参数 - 我不确定是明确记录的行为 - 我不知道这个想法实际上是我推荐的。

答案 1 :(得分:0)

您可以使用local version identifier来完成此操作。

  

本地版本标识符必须符合以下方案:

     

<public version identifier>[+<local version label>]

在您的情况下,这将是<major>.<minor>+<mercurial_version>,这将导致1.0+7ae7970a82c1