在阅读其他Python模块时,我看到很多人在其源文件(甚至在PEP3001中提到过)中通常包含__version__
和__author__
全局变量。我想用一组合理的变量来记录我的代码。什么是可能通常包含的全局变量列表?对于Python模块,要声明哪些标准全局变量?
回答
对于这些全局变量没有一个具体的标准 - 正如你所链接的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",
],
)
请注意,(IIUC)distutils即将出局。例如,'setup(...)'将被'setup.cfg'中的静态元数据替代。我绝对不知道这有多接近成为现实。 – delnan
使用distutils
(或超setuptools
),而不是提供有关项目的元数据。
特别是在使用setuptools
时,该元数据可通过pkg_resources
module找到并重复使用。
对于全局变量如__version__
没有标准,即使对于Python stdlib也是如此,这就是为什么在stdlib中为Python 3提供此元数据的努力尚未达到任何目的。
我可以推荐Python Packaging User Guide作为正确打包项目的入门书。
*在Python 3的stdlib中提供这种元数据的努力并没有达到任何目的* - 您能否提供一些参考?此外,您可能能够解释为什么某些stdlib软件包具有元数据而其他软件包不具备这些功能 - 请参阅https://github.com/pypa/pip/issues/1570 –
请参阅https://mail.python.org/pipermail/python -dev/2012六月/ 120430.html; 'distutils2'从来没有获得足够的吸引力,并且有了新的元数据格式和努力。至于* some * stdlib库中的元数据:我想他们是第一个独立的项目,后来被合并到stdlib中。 –
- 1. Python模块全局变量
- 2. Python模块与模块明智的全局变量
- 3. 在Python中声明全局变量类
- 4. 在Python中声明了哪些liveth全局变量但未定义全局变量?
- 5. 声明全局变量
- 6. 全局变量声明
- 7. 在TypeScript中使用外部模块声明全局变量
- 8. 将Typescript全局变量声明为“模块”类型
- 9. Python类正在更改全局变量而未声明全局
- 10. 运行Python 3.5解释器需要哪些标准库模块?
- 11. Python导入模块和全局变量
- 12. Eclipse:未明确声明全局变量
- 13. 关于Python全局变量声明的警告
- 14. 声明中轨全局模块
- 15. 模块的全局变量
- 16. 模块全局变量
- 17. FOR循环的“起始值”变量声明 - C标准允许哪些变量声明?
- 18. Python - 关于变量声明
- 19. 在Arduino中声明全局变量
- 20. 在perl中声明全局变量
- 21. 在ActionScript中声明全局变量?
- 22. 在Matlab中声明全局变量
- 23. 在coffescript中声明全局变量
- 24. 声明一个全局的Request.ServerVariable变量
- 25. 在yacc中声明全局变量
- 26. 声明全局静态变量
- 27. proc声明中的Tcl全局变量
- 28. JavaScript;我如何声明变量全局?
- 29. 全局变量在android中的声明
- 30. 如何声明全局变量?
个人而言,我避免使用任何这些东西混淆我的模块只是因为'__....__'名称属于* python *,我不认为用户应该覆盖任何东西,除非它是出于文档中描述的原因(例如用于初始化类的'__init__')...如果它在某些时候变得标准化(在PEP或文档中),我可能会改变我的看法 – mgilson
您指出PEP3001,但注意到PEP(“Python Enhancment _Proposal_”)是“撤回”。因此,PEP的语言不应被视为“标准”。您可能刚刚错过了状态标志,但为了以防万一,我将包含指向[PEP 1](http://www.python.org/dev/peps/pep-0001/)的链接,该链接解释了PEP过程起作用。 –
@mgilson - 这是一个公平的评论。我喜欢拥有“自我记录”代码的想法,即使它只是几乎没有标准化的全局变量。但是,与此同时,由于'__...__'属于Python,所以我可以看到你来自哪里。 –