2016-03-24 79 views
2

我在这里有一个奇怪的错误。 Python无法导入模块,即使我清楚地看到它在那里。这也不是一个有许多路径的复杂环境,而只是一个小项目。Python在“导入”(最小项目,没有外部导入)上找不到模块

我跑test.py。它导入模块stencils。在加载期间,调用stencils/__init.py__。该文件无法找到模块Stencil,它是stencils/Stencil.py

此外:

  • 运行stencils/__init__.py直接:作品。
  • 运行stencils/Abc.py:Works。
  • 运行test.py:给出错误:
Traceback (most recent call last): File "/Users/mi/stencilcodegen/test.py", line 1, in <module> 
import stencils File "/Users/mi/stencilcodegen/stencils/__init__.py", line 1, in <module> 
import Stencil ImportError: No module named 'Stencil' 

__init__.py:

import Stencil 
import Abc 

Abc.py:

import Stencil 
stencil = Stencil.Stencil 

Stencil.py:(大概是无关紧要的,因为它没有找到该模块在所有。)

class Stencil: 
    def __init__(self): 
     a = 1; 

test.py:

import stencils 
a = stencil.Stencil 

目录的截图(PyCharm)

enter image description here

+0

不应该是stencils.Stencil? – cafebabe1991

+0

可能存在后续错误,但目前的问题是它找到并调用'stencils/__ init.py__',但是这个文件没有找到一个名为'Stencil'的模块。 – Michael

回答

1

我有类似的问题,我发现巧合的解决方案。

test.py文件是“根”,所以,当你使用任何代码,然后您就可以看到从这个角度hieracy。您必须在子文件夹中的文件导入这样的:

在__init_.py

例如:

import stencils.Stencil as Stencil 
import stencils.Abc as Abc 

既然要导入的模块和功能,无论是文件夹stencils中,你还必须给出明确的路径的功能或任何存储的地方。对不起,我的表情很糟糕,我是德国人。

+0

重命名而不实际重命名是不必要的重复名称:'从模具导入Abc,Stencil'。 – BlackJack