从执行脚本内导入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"
答
正如PEP 328规定所有进口必须是绝对的,以防止模块屏蔽对方。绝对表示模块/包必须位于模块路径sys.path
中。相对导入(即点)只允许intra-packages明智,这意味着来自同一个软件包的模块需要相互导入。
所以这让你有以下几种可能:
你打个包(你似乎已经制造),包路径添加到SYS。路径
你只是调整的sys.path每个模块
你把你所有的自定义模块到同一目录下的启动脚本/主应用程序
为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
。没有from
的import .XYZ
是不允许的!
可能的dup,http://stackoverflow.com/questions/5497951/attempted-relative-import-in-non-package – Doboy 2012-03-16 04:26:12