如何生成和导出python库的自定义子库?

问题描述 投票:0回答:1

我正在一个项目上,我开发了一个库,我只想将此库的功能和对象的一部分导出到新库中。有没有一种方法可以通过算法做到这一点,而不仅仅是将所需的函数和类(具有依赖性)复制并粘贴到新库中?

为您提供一些背景信息。我正在一个机器学习项目中工作,其中有一个主库即开发人员库。在这个库中,我有很多模型和工具在研究中很有用,但是在生产中我只使用了这些模型,对象和函数的一小部分。

我的问题是,有没有一种方法可以定义某种文件,或者类似的东西,我可以写下要导出到新库中的函数和对象,因此在我的新库中,我只有所需的函数和对象,而不是整个库。

例如,使用我的主库,我可以:

from main_lib.models import ModelA, ModelB, ModelC...
from main_lib.utils import parse, save_data, load_data
from main_lib.images import augmentate, change_format

但是在产品中,我仅使用main_lib.models.ModelBmain_lib.parse。因此,我希望只将这两个文件导出到新的lib prod_lib中,我也可以从中执行此操作

from prod_lib.models import ModelB...
from prod_lib.utils import parse

并且在这里例如ModelB使用change_format,因此这种神奇的解决方案还应该知道ModelB也使用main_lib.images.change_format并将其导出。

所以理想情况下,当我认为我有一个新版本时,我只是将那些子模块和函数导出到新的库中。我的问题背后的主要动机之一是,每个这种不同的模型ModelAModelB等有时都有很多配置文件,我不想转移到产品环境,但是开发人员需要这些文件。

当然,我只能手动完成,只复制所需的方法,但是复制代码并手动执行操作可能是最糟糕的解决方案。或者,也许我在想这个问题,而有另一种组织图书馆的方法也可以解决我的问题。

我认为能够仅导出功能的子组将回答我的问题,但是任何其他建议都非常受欢迎。

python module packaging
1个回答
0
投票

您可以使用__init__.py文件,该文件可让您选择要“导出”的内容。您可以在官方文档中查找此内容,或参考这篇文章。在官方文档或stackoverflow.com/questions/448271/what-is-init-py-for]中了解有关init.py文件的更多信息>

但是,有一个警告:即使变量不在__init__.py文件中,也仍然可以在模块外部使用完全相同的目录访问它们。为了说明,这是一个示例

|-main.py
|-lib
  |-__init__.py
  |-libFile.py
  |-libFile2.py

__ init __。py

from lib.libFile import myFunc
from lib.libFile2 import myClass

main.py

from lib import myFunc, myClass
© www.soinside.com 2019 - 2024. All rights reserved.