我有一个包含多个嵌套模块的包:
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
!
我对导致导入错误的原因感到困惑,是否有人遇到过此类问题?
答案 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
总结一下:我需要重启控制台。