Python版本控制
我是Python新手。我有一个用例,其中用Python编写的函数需要进行版本控制(例如ML模型的特性计算) 假设Function1有两个副本,一个是version1,第二个是version2,您希望这两个副本都可以使用,即您可以通过指定函数名称和版本来调用函数的任何副本(当然,两个版本彼此不同) 问题:Python版本控制,python,Python,我是Python新手。我有一个用例,其中用Python编写的函数需要进行版本控制(例如ML模型的特性计算) 假设Function1有两个副本,一个是version1,第二个是version2,您希望这两个副本都可以使用,即您可以通过指定函数名称和版本来调用函数的任何副本(当然,两个版本彼此不同) 问题: 我们可以在一个应用程序下提供同一Python函数的多个版本吗?实现这一目标的最佳方式是什么 比如说,如果有人添加了新函数Function2,您是否需要重新启动Python应用程序,以便Funct
featureextractor\u a
,featureextractor\u B
)。在打算提供(通常是一个或多个)实现的任何包的setup.py
中,具有以下形式的入口点规范:
entry_points="""
[my.feature.extractor]
feature_1=featureextractor_A:function_A
feature_2=featureextractor_A:function_B
""",
然后,您可以从所有软件包中列出系统中当前可用的所有“功能提取器”,如下所示:
from pkg_resources import iter_entry_points
for entry_point in iter_entry_points(group='my.feature.provider', name=None):
... do something with entry_point ...
再次注意,这不是管理此类函数注册表的唯一方法。例如,您也可以在特定于应用程序的配置文件或数据库表中列出您的“可插入”函数,从而避开pkg\u资源
子系统(它可以)
您是否需要重新启动Python应用程序,以便Function2也可以使用
这取决于你如何实现整个系统。在上面提出的基于入口点的解决方案中,所有可用入口点的列表由pkg_resources
在应用程序启动时首次导入时构建,因此您需要重新启动或以某种方式强制重新扫描,以便在不重新启动的情况下使用新安装的软件包
不过,一般来说,只要将新包安装到Python的系统路径,就不需要重新启动即可使用它们。因此,如果您维护自己的注册表,您可以决定是否要定期“重新扫描”它,或者每次需要调用“可插拔”函数时总是引用某个持久状态(这里的缺点是每次调用时DB请求的开销)。首先,不要问多个,完全分开,一个问题中的问题。由于您的问题不是真正可以回答的,并且可能会结束,这里有一些评论。对于1,最简单的解决方案是只为函数指定不同的名称:
function1\u v1
和function1\u v2
。您可以使用fancier,例如,将它们放在一个列表中,以便有人可以使用function1[0]
和function1[1]
和function1[-1]
来获取最新版本。但是,如果没有更具体的例子来说明您正在尝试做什么,很难说这是否值得做。对于2.,是的,通常您需要重新启动应用程序。然而,有各种各样的技巧可以绕过这一点。例如,一些web框架使用助手应用程序作为子应用程序启动实际应用程序,然后监视文件;如果其中一个发生变化,它会要求孩子优雅地退出,然后重新启动。因此,对于开发人员来说,这看起来很像是神奇的自我更新Smalltalk风格的代码,尽管事实并非如此。感谢反馈,本质上我正在尝试构建一个功能生成引擎。因此,在运行模型之前,您将计算特征。特征是一种基本计算/计算,其中每个特征可以接受输入并返回一个数字或布尔值。每个功能都可以进行版本控制,例如明天您可以更改一个功能的实现。客户端将通过Http按名称和版本请求功能还有一个技巧:如果你设计了一个“插件”系统,你可以让你的应用程序监视插件目录中的新文件,然后尝试导入和注册它们。这不允许您动态更改或删除旧函数,但允许您动态添加新函数(将它们放入新插件模块并将其放入目录)。