2013-01-21 36 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中。 –