无法导入模块。

5
首先...我的目录结构如下:
---script/execute.py
          |
          L---helper---foo.py
                 L-----bar.py
                 L--- __init__.py

现在,execute.py 调用了 foo.py 和 bar.py 两个文件,如下所示:

from helper.foo import some_func

我试图以以下方式运行:

python script/execute.py 

但是我遇到了这个导入错误。
  from helper.foo import some_func
  Import error: No module named helper??

我缺少了什么(请注意,脚本文件夹中没有 init 文件)?谢谢。

3
似乎帮助程序不在与执行程序相同的级别上。 - cox
尝试在与helper/execute同级别的位置创建一个(空的)init.py文件。但是即使没有这个文件,也应该能够正常工作。我通常会将模块的绝对路径插入到sys.path中(sys.path.insert(0, ...)),这样就不会混淆..,./等路径了。 - cox
1
如果你运行 python execute.py,你是否有同样的问题? - Burhan Khalid
1
对我来说没问题。execute.pyhelper 模块真的在同一个目录下吗? - poke
请提供一个最小的可运行示例,以便我们可以测试发生了什么。根据您提供的描述,代码运行良好,因此可能存在描述上的缺陷。要么我们没有理解您想要表达的意思,要么您没有正确说明情况。我的建议是在此粘贴整个终端命令序列以创建整个目录结构并获得该错误,以便不会有任何模糊之处。 - Bakuriu
显示剩余2条评论
1个回答

2
你应该查看http://docs.python.org/2/tutorial/modules.html#packages 简而言之,你需要在你的助手目录中拥有一个名为__init__.py的文件。
$ touch helper/__init__.py

该文件也可以包含Python代码,但在最简单的形式下,一个空文件也是可以的。

问题顶部显示的目录结构清楚地表明“helper”已经包含了一个“init.py”文件。 - jwodder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接