2017-04-25 63 views
1

我有几个嵌套模块的程序包:导入从模块的功能故障,但类可以被导入

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

我已经安装了该封装的python setup.py developto_be_imported.py文件包含几个类和一个方法(在类之后,因为该方法使用类的某些类方法)。打开一个IPython的控制台后,下面的导入工作:

from somepackage.module1.module2.to_be_imported import SomeClass 

但是这一次失败,导入错误:

from somepackage.module1.module2.to_be_imported import my_method 

而且,如果我导入文件

from somepackage.module1.module2 import to_be_imported 

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

我对什么导致导入错误感到困惑,有没有人遇到过这样的问题?

+0

你确定你输入'to_be_imported'内'模块2/__ __初始化与py':'从.somepackage.module1.module2.to_be_imported进口*' – mertyildiran

+0

对不起,我在这个问题一个错字,不忘加上.to_be_imported前两个进口,我的__init__.py文件是空的 –

回答

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使用更短的路径。

+0

请看我更新的问题,我没有使用完整的路径,我的问题是不正确的。 –

0

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

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

相关问题