我正在尝试从当前正在执行的python文件中导入一个python文件(名为test.py,它位于父目录中)(我称之为a.py)。我所涉及的所有目录都有一个名为init.py的文件(init的每一侧都有2个下划线)
我的问题:当我尝试导入所需的文件时,出现以下错误
尝试非包装中的相对导入
我在a.py中的代码:
try:
from .linkIO can_follow # error occurs here
except Exception,e:
print e
print success
注意:我知道如果我要创建一个名为b.py的文件并导入a.py(它本身会导入所需的python文件),那么一切正常,那么哪里出错?
例如:
b.py:
import a
print "success 2"
答案 0 :(得分:3)
如PEP 328中所述,所有导入必须是绝对的,以防止模块相互屏蔽。绝对意味着模块/包必须位于模块路径sys.path
中。相对导入(即点数)只允许在包内明智,这意味着来自同一个包的模块想要相互导入。
所以这给你留下了以下可能性:
您创建了一个包(您似乎已经创建了包)并将包路径添加到sys。路径
您只需调整每个模块的sys.path
您将所有自定义模块放在与start-script / main-application相同的目录中
表示1.和2.您可以将一个包/模块添加到sys.path中,如下所示:
import sys
from os.path import dirname, join
sys.path.append(dirname(__file__)) #package-root-directory
或
module_dir = 'mymodules'
sys.path.append(join(dirname(__file__), module_dir)) # in the main-file
BTW:
from .linkIO can_follow
无法正常工作!缺少import
语句!
提醒一下:如果使用相对导入,则必须使用from-version:from .relmodule import xyz
。 1}}不允许使用import .XYZ
!