奇怪的python3导入问题,没有名为<module> </module>的模块

时间:2014-11-18 08:36:16

标签: python python-3.x

我写了一些像这样的python文件:

main.py
view/   __init__.py #empity file
        MainWindow.py
        ListEditor.py

在每个文件中我都写了这些导入:

<main.py>
from view.MainWindow import MainWindow
...

-

<MainWindow.py>
from view.ListEditor import ListEditor

和ListEditor.py不导入任何文件。 每个MainWindow.py或ListEditor.py定义一个名称与文件名相同的类。

当我从main.py运行程序时,它可以工作。但是当我从MainWindow.py运行时,我得到了ImportError:没有名为'view'的模块

如果我写

from ListEditor import ListEditor
在MainWindow.py中

python MainWindow.py就可以了。但是python main.py会收到错误: ImportError:没有名为'ListEditor'的模块

那么,有没有办法让python main.pypython MainWindow.py同时正确?

我正在使用python3.4


P.S。

我想我已经在这里找到了问题。 import命令在sys.path中搜索模块。 sys.path是一组预定义路径加上正在运行的脚本路径。当我从MainWindow.py运行代码时,代码import ListEditor正常工作,但是当我从main.py运行时,当前路径被设置为父路径。所以我需要import view.ListEditor。 好吧,有几种方法可以解决它。 @Vincent Beltman的答案就是其中之一。或者只是将这些代码放在__init__.py文件中:

import os, sys
path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(path)

最后,我是python的新手。我认为导入命令很奇怪。我认为应该搜索相对于包含命令的源文件路径的文件,而不仅仅是相对于启动文件。启动文件可能会发生变化并导致此类问题。

1 个答案:

答案 0 :(得分:2)

试试这个:

try:
    from view.ListEditor import ListEditor # If this one fails
except:
    try:
        from ListEditor import ListEditor # It will try this one