gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:50:08 27 4
gpt4 key购买 nike

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

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

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

谢谢。

最佳答案

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

  • 东风
    • __初始化__.py
    • dfbase.py
    • v1_1
      • __初始化__.py
      • 格式.py
    • v2_0
      • __初始化__.py
      • 格式.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:在应用程序中包含版本号的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com