我编写了一些Python脚本,并在顶部嵌入了一些元数据,即:

__version__ = '0.6.1' 

有人贡献了一个 setup.py,主要只是从脚本中复制元数据,所以我们有:

setup( 
    (...) 
    version='0.4.0', 

我非常不喜欢这种重复,原因上面应该很明显了。更新元数据是由人们完成的,并不是所有人都知道/记得它需要在两个地方进行更新。错误是必然会发生的。不要忘记这样一个事实,即仅更新一个位置的版本号也更容易。我试图通过从代码本身中删除元数据来消除重复元数据,但是......它实际上是在脚本中引用的(它是一个脚本,毕竟它接受 --version 和 --help )。在脚本中嵌入此类元数据也被认为是“最佳实践”。

我当然可以做一些技巧来让 setup.py 从脚本中读取元数据。事实上,我花的时间可能比写这个问题要少——我更想知道什么是“最佳实践”。在 setup.py 和库/脚本中复制这些信息真的被认为是“最佳实践”吗?是否存在一些现成的食谱样板代码用于从脚本/包本身读取元数据?如果设置方法可以自己完成此操作,那不是很有意义吗?

请您参考如下方法:

您可以导入包并从那里获取元数据。

这确实假设您的文件结构如下所示:

root/ 
    code.py 
    setup.py 

或者

root/ 
    code/ 
        __init__.py 
    setup.py 

并且 code.py__init__.py 具有元数据。

import os 
import sys 
 
__dir__ = path.abspath(path.dirname(__file__))  # The directory of setup.py, root/ 
sys.path.insert(0, __dir__)  # Will search __dir__ first for the package 
 
try: 
    import code 
finally: 
    sys.path.pop(0) 
 
setup_args = dict( 
    name='code', 
    # ... 
) 
 
for metadata in ('version', 'author', 'email', 'license'): 
    if hasattr(code, '__{}__'.format(metadata)): 
        setup_args[metadata] = getattr(code, '__{}__'.format(metadata)) 
 
setup(**setup_args) 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!