我正在一个项目上,我开发了一个库,我只想将此库的功能和对象的一部分导出到新库中。有没有一种方法可以通过算法做到这一点,而不仅仅是将所需的函数和类(具有依赖性)复制并粘贴到新库中?
为您提供一些背景信息。我正在一个机器学习项目中工作,其中有一个主库即开发人员库。在这个库中,我有很多模型和工具在研究中很有用,但是在生产中我只使用了这些模型,对象和函数的一小部分。
我的问题是,有没有一种方法可以定义某种文件,或者类似的东西,我可以写下要导出到新库中的函数和对象,因此在我的新库中,我只有所需的函数和对象,而不是整个库。
例如,使用我的主库,我可以:
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.ModelB
和main_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
并将其导出。
所以理想情况下,当我认为我有一个新版本时,我只是将那些子模块和函数导出到新的库中。我的问题背后的主要动机之一是,每个这种不同的模型ModelA
,ModelB
等有时都有很多配置文件,我不想转移到产品环境,但是开发人员需要这些文件。
当然,我只能手动完成,只复制所需的方法,但是复制代码并手动执行操作可能是最糟糕的解决方案。或者,也许我在想这个问题,而有另一种组织图书馆的方法也可以解决我的问题。
我认为能够仅导出功能的子组将回答我的问题,但是任何其他建议都非常受欢迎。
您可以使用__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