在Python项目中放置元信息(__version__等)的位置?

时间:2017-01-19 13:44:40

标签: python metadata setup.py

我有一个带有目录结构的小型Python2 / 3项目

superproject/
    ->  __init__.py
    ->  meta.py
setup.py

__init__.py文件包含一堆import和实际代码,meta有

 __author__ = 'John Doe'
 __author_email__ = 'john@doe.com'
 __version__ = '1.2.3'
 # [...]

我想在setup.py中提供元信息(简单:只需import superproject.meta),在superproject中提供

import superproject
print(superproject.__version__)

我正在努力应对后一种要求。做的时候

from .meta import *

__init__.py,我只能做

print(superproject.meta.__version__)

例如。

请注意,我不能直接在__init__.py中添加元信息,因为import superproject中必须setup.pyimport的{​​{1}}个依赖项然后还没有。

任何提示?

3 个答案:

答案 0 :(得分:2)

这是一个已知问题,Python软件基金会有一篇关于它的完整文章:Single-sourcing the Project Version

我玩了所有的建议,最终决定采用以下解决方案。

  1. meta.py中将__about__.py重命名为from ... import ...__init__.py
  2. setup.pyexec __about__.py放入字典并使用该信息。
  3. 这会将所有元信息提供为superproject.__about__.__version__以及superproject.__version__。此外,这样可以轻松地从import的其他子模块中获取superproject元信息。

    虽然它为setup.py增加了一点复杂性,但它使实际项目代码基本保持不变。我并不关心setup.py复杂程度,只要它可以远程维护。

答案 1 :(得分:0)

你可以做到

import importlib

meta = importlib.import_module ("mod.meta")
print (meta.__author__)

答案 2 :(得分:0)

您可以从项目根目录中的文件中读取此内容。在data_files docssetup.py中加入此文件。 JSON可能是最容易使用的格式。

,如

superproject/
    ->  __init__.py
setup.py
meta.json