从模块导入功能失败,但可以导入类



我有一个带有几个嵌套模块的软件包:

somepackage/
  module1/
    __init__.py
    module2/
      __init__.py
      to_be_imported.py
setup.py

我已经使用python setup.py develop安装了此软件包。to_be_imported.py文件包含一些类和一个方法(在类之后,由于该方法使用了类的某些类方法(。打开iPython控制台后,以下导入工作:

from somepackage.module1.module2.to_be_imported import SomeClass

但是,这是Importerror的失败:

from somepackage.module1.module2.to_be_imported import my_method

此外,如果我将文件导入为

from somepackage.module1.module2 import to_be_imported

并打印导入的文件内容,它也打印my_method

我对导致导入错误的原因感到困惑,有人遇到了此类问题吗?

请注意,module2 MISNOMER ,因为它实际上不是模块,而是子包。

您可以访问SomeClass,因为它已从to_be_imported导入到module2.__init__.py中。您可以打开module2.__init__.py来确认此。

要访问该功能,您应该指定完整的路径:

from somepackage.module1.module2.to_be_imported import my_method

或将其导入到module2.__init__.py中以使用较短的路径。

事实证明,我的问题是我的模块被缓存到我的ipython会话中。我稍后添加了my_method,因此缓存版本不包含它,但是当我打印文件时,它打印了最新版本。有关该主题的更多信息:防止Python缓存导入的模块

总结:我需要重新启动控制台。

相关内容

最新更新