在閱讀其他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,所以我可以看到你來自哪裏。 –