2013-01-21 38 views
7

在阅读其他Python模块时,我看到很多人在其源文件(甚至在PEP3001中提到过)中通常包含__version____author__全局变量。我想用一组合理的变量来记录我的代码。什么是可能通常包含的全局变量列表?对于Python模块,要声明哪些标准全局变量?

+2

个人而言,我避免使用任何这些东西混淆我的模块只是因为'__....__'名称属于* python *,我不认为用户应该覆盖任何东西,除非它是出于文档中描述的原因(例如用于初始化类的'__init__')...如果它在某些时候变得标准化(在PEP或文档中),我可能会改变我的看法 – mgilson

+1

您指出PEP3001,但注意到PEP(“Python Enhancment _Proposal_”)是“撤回”。因此,PEP的语言不应被视为“标准”。您可能刚刚错过了状态标志,但为了以防万一,我将包含指向[PEP 1](http://www.python.org/dev/peps/pep-0001/)的链接,该链接解释了PEP过程起作用。 –

+0

@mgilson - 这是一个公平的评论。我喜欢拥有“自我记录”代码的想法,即使它只是几乎没有标准化的全局变量。但是,与此同时,由于'__...__'属于Python,所以我可以看到你来自哪里。 –

回答

2

对于这些全局变量没有一个具体的标准 - 正如你所链接的PEP所指出的那样,它们试图达到一个标准,但并没有以任何单一的形式被普遍接受。

真正的标准是PyPI元数据,它使用distutils(或兼容接口)在您的模块的setup.py文件中指定。下面是从包装教程中的例子:

from distutils.core import setup 

setup(
    name='TowelStuff', 
    version='0.1.0', 
    author='J. Random Hacker', 
    author_email='[email protected]', 
    packages=['towelstuff', 'towelstuff.test'], 
    scripts=['bin/stowe-towels.py','bin/wash-towels.py'], 
    url='http://pypi.python.org/pypi/TowelStuff/', 
    license='LICENSE.txt', 
    description='Useful towel-related stuff.', 
    long_description=open('README.txt').read(), 
    install_requires=[ 
     "Django >= 1.1.1", 
     "caldav == 0.1.4", 
    ], 
) 

http://guide.python-distribute.org/creation.html

+1

请注意,(IIUC)distutils即将出局。例如,'setup(...)'将被'setup.cfg'中的静态元数据替代。我绝对不知道这有多接近成为现实。 – delnan

1

使用distutils(或超setuptools),而不是提供有关项目的元数据。

特别是在使用setuptools时,该元数据可通过pkg_resources module找到并重复使用。

对于全局变量如__version__没有标准,即使对于Python stdlib也是如此,这就是为什么在stdlib中为Python 3提供此元数据的努力尚未达到任何目的。

我可以推荐Python Packaging User Guide作为正确打包项目的入门书。

+0

*在Python 3的stdlib中提供这种元数据的努力并没有达到任何目的* - 您能否提供一些参考?此外,您可能能够解释为什么某些stdlib软件包具有元数据而其他软件包不具备这些功能 - 请参阅https://github.com/pypa/pip/issues/1570 –

+0

请参阅https://mail.python.org/pipermail/python -dev/2012六月/ 120430.html; 'distutils2'从来没有获得足够的吸引力,并且有了新的元数据格式和努力。至于* some * stdlib库中的元数据:我想他们是第一个独立的项目,后来被合并到stdlib中。 –