2016-09-16 59 views
1

我有很多理解python模块导入系统的麻烦。相关的Python模块

我想创建一个简单的文件夹结构如下。

SomeModule 
    __init__.py 
    AnotherModule 
     AnotherModule.py 
     __init__.py 
     Utils 
      Utils.py 
      __init__.py 

要使用SomeModule我可以这样做:

SomeModule.Foo() 

现在里面AnotherModule.py我想导入我的Utils目录。

为什么我要做

import SomeModule.AnotherModule.Utils.Foo 

为什么我不能只是做

import Utils.Foo 
+2

因为_explicit优于implicit._ – wim

+0

所以模块必须知道它的完整路径?你不能将模块移动到另一个模块目录而不改变文件中的每个导入? – marsh

+0

如果你感觉很勇敢,你可以在'import .Utils'处去。 – wim

回答

0

要缩短了,你必须在你的代码来调用实际的函数名,可以随时做:

from SomeModule.AnotherModule.Utils import * 

虽然这仍然不会让你摆脱一个较短的进口声明在顶部您的脚本,您只需调用其功能名称即可访问.Utils中的所有功能(即, foo(x)而不是SomeModule.AnotherModule.Utils.foo(x)

冗长导入声明的部分原因来自@wim的评论。在python解释器中输入import this来查看。

0

import sys 
import SomeModule.AnotherModule 
sys.modules['AnotherModule'] = SomeModule.AnotherModule 

在SomeModules __init__.py