2011-04-16 71 views
0

我有三个模块:为什么Python导入不工作?

plugin_grt.py

fragments.py

helpers.py

就在plugin_grt.py顶部我

from jpa_export_helpers import SourceFile, Mysql, Conv, Columns, Column, Table, ForeignKey, Index, Catalog, Inheritance 

这作品,这是我可以使用Table.whateverMethod(...)没有问题。现在,当我将相同的导入添加到fragments.py模块的顶部时,我得到:

Traceback (most recent call last): 

    File "C:\Users\Kawu\AppData\Roaming\MySQL\Workbench\modules\jpa_export_plugin_grt.py", line 53, in <module> 
    from jpa_export_helpers import SourceFile, Mysql, Conv, Columns, Column, Table, ForeignKey, Index, Catalog, Inheritance 

    File "C:\Users\Kawu\AppData\Roaming\MySQL\Workbench\modules\jpa_export_helpers.py", line 2, in <module> 
    from jpa_export_fragments import Type, EnumValue 

    File "C:\Users\Kawu\AppData\Roaming\MySQL\Workbench\modules\jpa_export_fragments.py", line 2, in <module> 
    from jpa_export_helpers import SourceFile, Mysql, Conv, Columns, Column, Table, ForeignKey, Index, Catalog, Inheritance 

ImportError: cannot import name SourceFile 

为什么不能正常工作?唯一的解决方法是正确的导入类需要它们的地方,但它不是我喜欢的东西(至少目前如此):

def getPrimaryKeyColumns(self): 
    from jpa_export_helpers import Columns 
    return Columns.getPrimaryKeyColumns(self.table.columns) 

注意,我原本一个Java家伙,所以进口“随意”对我来说似乎很陌生。无论如何,这里有什么问题?

+0

'jpa_export_fragments'和'jpa_export_helpers'是你的吗?毕竟他们正在造成错误。 'plugin_grt'不是问题。 – delnan 2011-04-16 12:49:22

+0

注意到plugins_grt和fragments的输入是什么,按什么顺序会使问题(和问题)更加清晰。 – msw 2011-04-16 13:06:46

回答

2

请注意堆栈跟踪中除导入之外没有任何错误。我发现那种错误几乎总是与 递归 循环导入有关。

3

当您导入到模块中时,您将导入模块的名称空间。因此,当你在plugin_jrt_py

from jpa_export_helpers import SourceFile 

你实际上已经创建了一个名字plugin_jrt_py.SourceFile。在命名空间解析之后,在plug_in_jrt.py之内,该名称可以缩短为SourceFile,但仅在plug_in_jrt之内。

因为导入有副作用,所以import语句很小心,不要导入模块两次。

你没有指定一个调用序列,但我怀疑fragments.py是由plugin_jrt.py导入的,所以这个名字在没有资格的情况下是不可访问的。

尽量放弃from子句和错误将变得更加明显。