gpt4 book ai didi

python - 创建从它继承的对象时在 Python 中有条件地导入

转载 作者:太空狗 更新时间:2023-10-30 01:18:12 26 4
gpt4 key购买 nike

我创建了一个连接到其他库的包 (livelossplot)。它有很多可选的依赖项(深度学习框架),我不想强​​迫人们安装它们。

现在我本着以下精神使用条件导入:

try:
from .keras_plot import PlotLossesKeras
except ImportError:
# import keras plot only if there is keras
pass

但是,这意味着它会导入大型库,即使您并不打算使用它们。问题是:如何仅在创建特定对象时导入库?

对于Python函数,很简单:

def function_using_keras():
import keras
...

对于从其他类继承的类,什么是好的做法?

看来在定义一个对象之前需要导入一个父类:

from keras.callbacks import Callback
class PlotLossesKeras(Callback):
...

最佳答案

最直接和最容易理解的解决方案是将您的库拆分为子模块。

与尝试在对象初始化时进行导入相比,它有几个优点:

  1. 用户知道会发生什么。 import my_lib.keras 很可能依赖keras
  2. 导入错误发生在导入期间,而不是运行时
  3. 通过不依赖从未导入的类继承的技巧,您可以避免很多潜在的问题
  4. 最终用户只需将 import my_lib.keras 更改为 import my_lib.tensorflow
  5. 即可非常轻松地在实现之间切换

这样的解决方案看起来像

# mylib/__init__.py
class SomethingGeneric():
pass

def something_else():
pass

然后

# mylib/keras.py
import keras

class PlotLosses():
pass

# mylib/tensorflow.py
import tensorflow

class PlotLosses():
pass

关于python - 创建从它继承的对象时在 Python 中有条件地导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com