在閱讀其他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. Python類正在更改全局變量而未聲明全局
- 8. 運行Python 3.5解釋器需要哪些標準庫模塊?
- 9. Python導入模塊和全局變量
- 10. Eclipse:未明確聲明全局變量
- 11. 聲明中軌全局模塊
- 12. ES6模塊 - 全局變量
- 13. FOR循環的「起始值」變量聲明 - C標準允許哪些變量聲明?
- 14. Python - 關於變量聲明
- 15. 在ActionScript中聲明全局變量?
- 16. 全局變量多重聲明
- 17. proc聲明中的Tcl全局變量
- 18. Oracle觸發器:聲明全局變量
- 19. 聲明Button1_Click中的全局變量
- 20. 聲明和初始化全局變量
- 21. 在yacc中聲明全局變量
- 22. 聲明一個全局的Request.ServerVariable變量
- 23. Android聲明全局變量片段
- 24. MSAccess:全局與本地變量聲明
- 25. 在Matlab中聲明全局變量
- 26. 在coffescript中聲明全局變量
- 27. 在全局變量中聲明查詢
- 28. 在Java中聲明全局變量
- 29. JavaScript;我如何聲明變量全局?
- 30. 在Swift中聲明全局變量
個人而言,我避免使用任何這些東西混淆我的模塊只是因爲'__....__'名稱屬於* python *,我不認爲用戶應該覆蓋任何東西,除非它是出於文檔中描述的原因(例如用於初始化類的'__init__')...如果它在某些時候變得標準化(在PEP或文檔中),我可能會改變我的看法 – mgilson
您指出PEP3001,但注意到PEP(「Python Enhancment _Proposal_」)是「撤回」。因此,PEP的語言不應被視爲「標準」。您可能剛剛錯過了狀態標誌,但爲了以防萬一,我將包含指向[PEP 1](http://www.python.org/dev/peps/pep-0001/)的鏈接,該鏈接解釋了PEP過程起作用。 –
@mgilson - 這是一個公平的評論。我喜歡擁有「自我記錄」代碼的想法,即使它只是幾乎沒有標準化的全局變量。但是,與此同時,由於'__...__'屬於Python,所以我可以看到你來自哪裏。 –