我有一个带有几个嵌套模块的软件包:
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缓存导入的模块
总结:我需要重新启动控制台。