我创建了一个连接到其他库的包(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):
...
最佳答案
最直接,最容易理解的解决方案是将库拆分为子模块.
原文链接:https://www.f2er.com/python/438943.html与尝试在对象初始化上进行导入相比,它有几个优点:
>用户知道会发生什么. import my_lib.keras很可能依赖于keras
>导入错误发生在导入期间,而不是在运行时
>通过不依赖于从未经插入的类继承的技巧,您可以避免许多潜在的问题
>只需更改import my_lib.keras以导入my_lib.tensorflow,最终用户就可以非常轻松地在实现之间切换
这样的解决方案可能看起来像
# 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