ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:在应用程序中包含版本号的最佳实践?

2019-06-26 20:43:02  阅读:200  来源: 互联网

标签:python global-variables version


我有一个PyQt应用程序,可以读取和写入数据文件.我在每个文件中都包含一个“版本号”.这是一个类似的简单数字:1.2或其他(主要版本和次要版本).

我这样做是为了我可以在将来的版本中更改这些数据文件的格式,然后只需检查文件中的版本是否正确解析它们.

我的问题是保持这个数字存储在应用程序本身内的最佳做法是什么.即我只是将应用版本号硬编码到负责读取和写入文件的类中吗?或者我应该在应用程序的顶层存储某种对象/变量,并以某种方式从负责读取和写入这些文件的类中访问它.如果是后者,我该如何存储它以及如何访问它?

谢谢.

解决方法:

首先,将数据格式与应用程序分开编辑,如果尚未这样做的话.其次,为较新版本的格式提供单独的类.如果格式完全向后兼容,则可以删除旧版本的类.至于文件结构,你可以有类似的东西:

  > DF
    
      > __init__.py
      > dfbase.py
      > v1_1
        
          > __init__.py
          > format.py
        
      
      > v2_0
        
          > __init__.py
          > format.py
        
      
    
  

其中“df”代表数据格式名称.包初始化文件导入适当的包并定义结构或函数以使其可访问.顶级__init__.py还应定义工厂函数来创建数据格式对象,因此您不必这样做.

DF / __ init__.py:

from df.dfbase import DFBase
from v1_1 import DF as DF1
from v2_0 import DF as DF2
versions = {
  '1.0': DF1, # let's say minor versions are fully backwards compatible
  '1.1': DF1, 
  '2.0': DF2
}
def create(file):
    """Factory function. Loads data from 'file', returns a DF of the appropriate 
    version.
    """
    ...

DF / V1_1 / __ init__.py:

__version__ = '1.1'
# previous versions that this one is backwards compatible with
previous = ['1.0']
from format import DF

DF / V1_1 / format.py:

from df import DFBase

class DF(DFBase):
    ...

DF / V2_0 / __ init__.py:

__version__ = '2.0'
from format import DF

通过DF / __ init__.py中的更多编码,您可以自动导入和注册格式版本.

import glob, sys
from ndf.ndfbase import NDFBase

formats={}

for ver in glob.iglob('v*_*'):
    pkg = '{0}.{1}'.format(__package__, ver)
    __import__(pkg)
    formats[sys.modules[pkg].__version__] = sys.modules[pkg]
    if hasattr(sys.modules[pkg], 'previous'):
        for prev in sys.modules[pkg].previous:
            formats[prev] = sys.modules[pkg]

def create(file):
    """Factory function. Loads data from 'file', returns a DF of the appropriate 
    version.
    """
    ...

标签:python,global-variables,version
来源: https://codeday.me/bug/20190626/1297780.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有