0

我正在做一个项目,我开发了一个库,我想只将这个库的一部分函数和对象导出到一个新库。有没有办法通过算法来执行此操作,而不仅仅是将所需的函数和类(及其依赖项)复制并粘贴到新库中?

给你一点背景。我在一个机器学习项目中工作,其中我有一个主库,即开发人员库。在这个库中,我有很多在研究环境中有用的模型和实用程序,但我只在生产中使用了这些模型、对象和函数的一小部分。

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

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

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.ModelBand main_lib.parse。所以我想理想地只将这两个导出到一个prod_lib我也可以做的新库中

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

例如这里ModelB使用了change_format,所以这个神奇的解决方案也应该知道ModelB使用main_lib.images.change_format和导出它。

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

当然我只能手工做,复制需要的方法,但复制代码,手工做可能是最糟糕的解决方案。或者也许我想错了这个问题,还有另一种组织图书馆的方法也可以解决我的问题。

我认为能够仅导出一组函数将回答我的问题,但非常欢迎任何其他建议。

4

1 回答 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

主文件

from lib import myFunc, myClass

但是,有一个警告。如果您在 libFile 中有一个名为 myClass2 的类,仍然可以通过这种方式访问​​它

from lib.libFile import myClass2 #still works

这样,您可以“导出”库的某些部分

于 2020-05-18T22:36:22.213 回答