从模块导入函数失败,但可以导入类

时间:2017-04-25 09:31:36

标签: python python-3.x

我有一个包含多个嵌套模块的包:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

from somepackage.module1.module2.to_be_imported import my_method

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

答案 1 :(得分:0)

事实证明,我的问题是我的模块被缓存到我的IPython会话中。我之后添加了my_method,因此缓存版本不包含它,但是当我打印文件时,它会打印出最新版本。更多关于这个主题: Prevent Python from caching the imported modules

总结一下:我需要重启控制台。