【问题标题】:In Python, how to import all modules from a library in one line?在 Python 中,如何在一行中从库中导入所有模块?
【发布时间】:2021-09-01 02:48:25
【问题描述】:

以下代码有效:

import torch
import pytorch_lightning   as torchl
import pytorch_forecasting as torchf 
from pytorch_forecasting.data.examples import get_stallion_data
x = torchf.data.examples.get_stallion_data()
print(x)

但是,如果我删除第 4 行,则会收到错误消息:

AttributeError: module 'pytorch_forecasting.data' has no attribute 'examples'

仅仅为了从一个库中加载几个模块而花费很多行是乏味和丑陋的,例如:

from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor
from pytorch_lightning.loggers import TensorBoardLogger
from pytorch_forecasting import Baseline, TemporalFusionTransformer, TimeSeriesDataSet
from pytorch_forecasting.data import GroupNormalizer
from pytorch_forecasting.metrics import SMAPE, PoissonLoss, QuantileLoss
from pytorch_forecasting.models.temporal_fusion_transformer.tuning import optimize_hyperparameters
from pytorch_forecasting.data.examples import get_stallion_data

有没有办法只使用一行来导入所有这些模块,然后将它们用作:

x=torchf.bla.bla.bla.bla(parameters)

我更喜欢这种方式,因为名称冲突的危险较小:调用 x=library1.module(); y=library2.module(); 可以避免名称冲突,这与 from library1 import *; from library2 import *; x=module(); y=module(); 不同。

【问题讨论】:

  • 有人有什么建议吗?

标签: python import module package python-import


【解决方案1】:

要从包中导入所有内容,您只需执行import pytorch_lightning,它将导入包中的所有模块和文件。然后您可以将其用作x = pytorch_lightning.callbacks.EarlyStopping()

缺点是您正在加载您不一定需要的文件和模块(以及它们连续导入的包),这会增加导入时间。

【讨论】:

  • 此外,您可以这样做import pytorch_lightning as sth,其中sth 是您喜欢的任何名称,但它可以更短,例如pylight,然后使用它,例如pylight.sth.sth()。如果导入特定的东西,它也会导入整个包,换句话说,它不会增加导入时间,因为它仍然运行整个文件,它只是让命名空间更有条理,所以这不是一个缺点
  • 我已经尝试过了,但它不起作用:尝试删除上面的第 4 行并运行脚本。
  • 请您完成这个问题好吗?
  • 我也未能成功导入它,并将其作为问题提交给 pytorch_forecasting Github repo。
  • @Leo stackoverflow.com/questions/4871369/…这是对问题的回应,有道理。
猜你喜欢
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2013-02-02
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多