我写了一些像这样的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.py
和python 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的新手。我认为导入命令很奇怪。我认为应该搜索相对于包含命令的源文件路径的文件,而不仅仅是相对于启动文件。启动文件可能会发生变化并导致此类问题。
答案 0 :(得分:2)
试试这个:
try:
from view.ListEditor import ListEditor # If this one fails
except:
try:
from ListEditor import ListEditor # It will try this one