从执行脚本内导入Python文件

问题描述:

我正试图从当前正在执行的python文件(我将其称为a.py)中导入一个python文件(称为驻留在父目录中的test.py)。所有涉及我的目录有一个文件叫init.py(2强调初始化的每边)从执行脚本内导入Python文件

我的问题:当我尝试导入所需的文件,我收到以下错误

在非包试图相对进口

我的代码里面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

可能的dup,http://stackoverflow.com/questions/5497951/attempted-relative-import-in-non-package – Doboy 2012-03-16 04:26:12

正如PEP 328规定所有进口必须是绝对的,以防止模块屏蔽对方。绝对表示模块/包必须位于模块路径sys.path中。相对导入(即点)只允许intra-packages明智,这意味着来自同一个软件包的模块需要相互导入。

所以这让你有以下几种可能:

  1. 你打个包(你似乎已经制造),包路径添加到SYS。路径

  2. 你只是调整的sys.path每个模块

  3. 你把你所有的自定义模块到同一目录下的启动脚本/主应用程序

为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 .relmodule import xyz。没有fromimport .XYZ是不允许的!