【问题标题】:A dynamic load __import__ reports no module error动态加载 __import__ 报告没有模块错误
【发布时间】:2014-04-22 04:53:19
【问题描述】:

这是我的目录结构:

在文件 keyword.py 中,我在第一行导入 lottery.lottery,如下所示: 从 lottery.lotterya 导入彩票 在文件 rule.py 中,我像这样动态导入 lottery.keyword: __import('lottery.keyword') 但它报告错误“没有名为 lotterya 的模块”。 我不知道该怎么办。有人可以帮忙吗?

我动态导入一个模块

【问题讨论】:

  • 我想知道您是否删除了keyword.py中的“import lottery.lottery”,是否返回错误? init.py 是否存在于彩票中?我不确定你是错过了还是没有放在这里。
  • 如果我删除“import lottery.lotterya”,它找不到类Lottery,init.py已经存在于包中。事实上它报告没有名为 lotterya 的模块。
  • 所以看起来动态导入的文件不能在里面定义静态导入,这很奇怪。当我有答案时,我会写更多。

标签: python reflection import reload


【解决方案1】:

这是您的问题的一种解决方案。它使用 importlib 进行动态导入。

在 ruly.py 中

import importlib

if __name__ == '__main__':
    mKey = importlib.import_module('lottery.keyword')
    MyKeyword = getattr(mKey,'MyKeyword')
    k = MyKeyword()
    k.mPrint()

在keyword.py中

from lottery.lotterya import Lotterya

class MyKeyword():
    def __init__(self):
        pass
    def mPrint(self):
        print 'Hello, keyword'
        l = Lotterya()
        l.lPrint()

在lotterya.py中

class Lotterya:
    def __init__(self):
        pass
    def lPrint(self):
        print 'Hello, Lotterya'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2011-11-06
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多