Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python版本控制_Python - Fatal编程技术网

Python版本控制

Python版本控制,python,Python,我是Python新手。我有一个用例,其中用Python编写的函数需要进行版本控制(例如ML模型的特性计算) 假设Function1有两个副本,一个是version1,第二个是version2,您希望这两个副本都可以使用,即您可以通过指定函数名称和版本来调用函数的任何副本(当然,两个版本彼此不同) 问题: 我们可以在一个应用程序下提供同一Python函数的多个版本吗?实现这一目标的最佳方式是什么 比如说,如果有人添加了新函数Function2,您是否需要重新启动Python应用程序,以便Funct

我是Python新手。我有一个用例,其中用Python编写的函数需要进行版本控制(例如ML模型的特性计算)

假设Function1有两个副本,一个是version1,第二个是version2,您希望这两个副本都可以使用,即您可以通过指定函数名称和版本来调用函数的任何副本(当然,两个版本彼此不同)

问题:

  • 我们可以在一个应用程序下提供同一Python函数的多个版本吗?实现这一目标的最佳方式是什么

  • 比如说,如果有人添加了新函数Function2,您是否需要重新启动Python应用程序,以便Function2也可以使用?(在Java world中,您将重新启动应用程序以在RAM中重新加载最新的jar)

  • 谢谢

    我们可以在一个应用程序下提供同一Python函数的多个版本吗

    是的,你可以,但是没有一种“标准”的方法来做到这一点——你有很多种可能自己滚动

    实现这一目标的最佳方式是什么

    从理论上讲,一种相当干净的方法是利用Python的打包和系统

    将函数的每个实现包装到单独的包中(例如,
    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按名称和版本请求功能还有一个技巧:如果你设计了一个“插件”系统,你可以让你的应用程序监视插件目录中的新文件,然后尝试导入和注册它们。这不允许您动态更改或删除旧函数,但允许您动态添加新函数(将它们放入新插件模块并将其放入目录)。